diff options
Diffstat (limited to 'doc/user')
38 files changed, 32564 insertions, 0 deletions
diff --git a/doc/user/.cvsignore b/doc/user/.cvsignore new file mode 100644 index 0000000000..5ebbd7c65d --- /dev/null +++ b/doc/user/.cvsignore @@ -0,0 +1,51 @@ +bsp.texi +clock.texi +concepts.texi +conf.texi +c_user +c_user-? +c_user-?? +c_user.aux +c_user.cp +c_user.cps +c_user.dvi +c_user.fn +c_user.fns +c_user*.html +c_user.ky +c_user.log +c_user.pdf +c_user.pg +c_user.ps +c_user.toc +c_user.tp +c_user.vr +datatypes.texi +dpmem.texi +event.texi +fatal.texi +index.html +init.texi +intr.texi +io.texi +Makefile +Makefile.in +mdate-sh +mp.texi +msg.texi +overview.texi +part.texi +region.texi +rtems_footer.html +rtems_header.html +rtemspie.pdf +rtmon.texi +schedule.texi +sem.texi +signal.texi +stamp-vti +states.pdf +task.texi +timer.texi +userext.texi +version.texi diff --git a/doc/user/Makefile.am b/doc/user/Makefile.am new file mode 100644 index 0000000000..1869ef34b1 --- /dev/null +++ b/doc/user/Makefile.am @@ -0,0 +1,166 @@ +# +# COPYRIGHT (c) 1988-2002. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +PROJECT = c_user +EDITION = 1 + +include $(top_srcdir)/project.am +include $(top_srcdir)/main.am + +FILES = bsp.texi dirstat.texi example.texi glossary.texi preface.texi + +GENERATED_FILES = overview.texi concepts.texi datatypes.texi init.texi \ + task.texi intr.texi clock.texi timer.texi sem.texi msg.texi event.texi \ + signal.texi part.texi region.texi dpmem.texi io.texi fatal.texi \ + schedule.texi rtmon.texi bsp.texi userext.texi conf.texi mp.texi + +COMMON_FILES += $(top_srcdir)/common/cpright.texi + +info_TEXINFOS = c_user.texi +c_user_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +PNG_FILES = rtemsarc.png rtemspie.png states.png + +EPS_IMAGES = rtemspie.eps states.eps +$(PROJECT).dvi: $(EPS_IMAGES) + +PDF_IMAGES = rtemspie.pdf states.pdf +CLEANFILES += $(PDF_IMAGES) + +if USE_HTML +html_project_DATA += $(PNG_FILES) +endif + +overview.texi: overview.t + $(BMENU2) -p "Preface" \ + -u "Top" \ + -n "Key Concepts" < $< > $@ + +concepts.texi: concepts.t + $(BMENU2) -p "Overview Manual Organization" \ + -u "Top" \ + -n "RTEMS Data Types" < $< > $@ + +datatypes.texi: datatypes.t + $(BMENU2) -p "Key Concepts Memory Management" \ + -u "Top" \ + -n "Initialization Manager" < $< > $@ + +init.texi: init.t + $(BMENU2) -p "RTEMS Data Types List of Data Types" \ + -u "Top" \ + -n "Task Manager" < $< > $@ + +task.texi: task.t + $(BMENU2) -p "Initialization Manager SHUTDOWN_EXECUTIVE - Shutdown RTEMS" \ + -u "Top" \ + -n "Interrupt Manager" < $< > $@ + +intr.texi: intr.t + $(BMENU2) -p "Task Manager TASK_VARIABLE_DELETE - Remove per task variable" \ + -u "Top" \ + -n "Clock Manager" < $< > $@ + +clock.texi: clock.t + $(BMENU2) \ + -p "Interrupt Manager INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress" \ + -u "Top" \ + -n "Timer Manager" < $< > $@ + +timer.texi: timer.t + $(BMENU2) -p "Clock Manager CLOCK_TICK - Announce a clock tick" \ + -u "Top" \ + -n "Semaphore Manager" < $< > $@ + +sem.texi: sem.t + $(BMENU2) -p "Timer Manager TIMER_RESET - Reset an interval timer" \ + -u "Top" \ + -n "Message Manager" < $< > $@ + +msg.texi: msg.t + $(BMENU2) -p "Semaphore Manager SEMAPHORE_FLUSH - Unblock all tasks waiting on a semaphore" \ + -u "Top" \ + -n "Event Manager" < $< > $@ + +event.texi: event.t + $(BMENU2) \ + -p "Message Manager MESSAGE_QUEUE_FLUSH - Flush all messages on a queue" \ + -u "Top" \ + -n "Signal Manager" < $< > $@ + +signal.texi: signal.t + $(BMENU2) -p "Event Manager EVENT_RECEIVE - Receive event condition" \ + -u "Top" \ + -n "Partition Manager" < $< > $@ + +part.texi: part.t + $(BMENU2) -p "Signal Manager SIGNAL_SEND - Send signal set to a task" \ + -u "Top" \ + -n "Region Manager" < $< > $@ + +region.texi: region.t + $(BMENU2) \ +-p "Partition Manager PARTITION_RETURN_BUFFER - Return buffer to a partition" \ + -u "Top" \ + -n "Dual-Ported Memory Manager" < $< > $@ + +dpmem.texi: dpmem.t + $(BMENU2) \ + -p "Region Manager REGION_GET_SEGMENT_SIZE - Obtain size of a segment" \ + -u "Top" \ + -n "I/O Manager" < $< > $@ + +io.texi: io.t + $(BMENU2) -p "Dual-Ported Memory Manager PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address" \ + -u "Top" \ + -n "Fatal Error Manager" < $< > $@ + +fatal.texi: fatal.t + $(BMENU2) -p "I/O Manager IO_CONTROL - Special device services" \ + -u "Top" \ + -n "Scheduling Concepts" < $< > $@ + +schedule.texi: schedule.t + $(BMENU2) \ +-p "Fatal Error Manager FATAL_ERROR_OCCURRED - Invoke the fatal error handler" \ + -u "Top" \ + -n "Rate Monotonic Manager" < $< > $@ + +rtmon.texi: rtmon.t + $(BMENU2) -p "Scheduling Concepts Task State Transitions" \ + -u "Top" \ + -n "Board Support Packages" < $< > $@ + +bsp.texi: bsp.t + $(BMENU2) -p "Rate Monotonic Manager RATE_MONOTONIC_GET_STATUS - Obtain status information on period" \ + -u "Top" \ + -n "User Extensions Manager" < $< > $@ + +userext.texi: userext.t + $(BMENU2) -p "Board Support Packages Heterogeneous Systems" \ + -u "Top" \ + -n "Configuring a System" < $< > $@ + +conf.texi: conf.t + $(BMENU2) -p "User Extensions Manager EXTENSION_DELETE - Delete a extension set" \ + -u "Top" \ + -n "Multiprocessing Manager" < $< > $@ + +mp.texi: mp.t + $(BMENU2) -p "Configuring a System Sizing the RTEMS RAM Workspace" \ + -u "Top" \ + -n "Directive Status Codes" < $< > $@ + +noinst_DATA = states.gif rtemspie.gif + +EXTRA_DIST = bsp.t concepts.t clock.t datatypes.t conf.t dpmem.t event.t \ + fatal.t init.t intr.t io.t mp.t msg.t overview.t part.t region.t rtmon.t \ + sem.t schedule.t signal.t task.t timer.t userext.t $(PNG_FILES) \ + $(EPS_IMAGES) $(noinst_DATA) + +CLEANFILES += c_user.info c_user.info-? c_user.info-?? diff --git a/doc/user/bsp.t b/doc/user/bsp.t new file mode 100644 index 0000000000..e0b0434d12 --- /dev/null +++ b/doc/user/bsp.t @@ -0,0 +1,318 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Board Support Packages + +@cindex Board Support Packages +@cindex BSPs + +@section Introduction + +@cindex BSP, definition + +A board support package (BSP) is a collection of +user-provided facilities which interface RTEMS and an +application with a specific hardware platform. These facilities +may include hardware initialization, device drivers, user +extensions, and a Multiprocessor Communications Interface +(MPCI). However, a minimal BSP need only support processor +reset and initialization and, if needed, a clock tick. + +@section Reset and Initialization + +An RTEMS based application is initiated or +re-initiated when the processor is reset. This initialization +code is responsible for preparing the target platform for the +RTEMS application. Although the exact actions performed by the +initialization code are highly processor and target dependent, +the logical functionality of these actions are similar across a +variety of processors and target platforms. + +Normally, the application's initialization is +performed at two separate times: before the call to +@code{@value{DIRPREFIX}initialize_executive} +(reset application initialization) and +after @code{@value{DIRPREFIX}initialize_executive} +in the user's initialization tasks +(local and global application initialization). The order of the +startup procedure is as follows: + +@enumerate +@item Reset application initialization. +@item Call to @code{@value{DIRPREFIX}initialize_executive} +@item Local and global application initialization. +@end enumerate + +The reset application initialization code is executed +first when the processor is reset. All of the hardware must be +initialized to a quiescent state by this software before +initializing RTEMS. When in quiescent state, devices do not +generate any interrupts or require any servicing by the +application. Some of the hardware components may be initialized +in this code as well as any application initialization that does +not involve calls to RTEMS directives. + +The processor's Interrupt Vector Table which will be +used by the application may need to be set to the required value +by the reset application initialization code. Because +interrupts are enabled automatically by RTEMS as part of the +@code{@value{DIRPREFIX}initialize_executive} directive, +the Interrupt Vector Table MUST +be set before this directive is invoked to insure correct +interrupt vectoring. The processor's Interrupt Vector Table +must be accessible by RTEMS as it will be modified by the +@code{@value{DIRPREFIX}interrupt_catch} directive. +On some CPUs, RTEMS installs it's +own Interrupt Vector Table as part of initialization and thus +these requirements are met automatically. The reset code which +is executed before the call to @code{@value{DIRPREFIX}initialize_executive} +has the following requirements: + +@itemize @bullet +@item Must not make any RTEMS directive calls. + +@item If the processor supports multiple privilege levels, +must leave the processor in the most privileged, or supervisory, +state. + +@item Must allocate a stack of at least @code{@value{RPREFIX}MINIMUM_STACK_SIZE} +bytes and initialize the stack pointer for the +@code{@value{DIRPREFIX}initialize_executive} directive. + +@item Must initialize the processor's Interrupt Vector Table. + +@item Must disable all maskable interrupts. + +@item If the processor supports a separate interrupt stack, +must allocate the interrupt stack and initialize the interrupt +stack pointer. +@end itemize + +The @code{@value{DIRPREFIX}initialize_executive} directive does not return to +the initialization code, but causes the highest priority +initialization task to begin execution. Initialization tasks +are used to perform both local and global application +initialization which is dependent on RTEMS facilities. The user +initialization task facility is typically used to create the +application's set of tasks. + +@subsection Interrupt Stack Requirements + +The worst-case stack usage by interrupt service +routines must be taken into account when designing an +application. If the processor supports interrupt nesting, the +stack usage must include the deepest nest level. The worst-case +stack usage must account for the following requirements: + +@itemize @bullet +@item Processor's interrupt stack frame + +@item Processor's subroutine call stack frame + +@item RTEMS system calls + +@item Registers saved on stack + +@item Application subroutine calls +@end itemize + +The size of the interrupt stack must be greater than +or equal to the constant @code{@value{RPREFIX}MINIMUM_STACK_SIZE}. + +@subsection Processors with a Separate Interrupt Stack + +Some processors support a separate stack for +interrupts. When an interrupt is vectored and the interrupt is +not nested, the processor will automatically switch from the +current stack to the interrupt stack. The size of this stack is +based solely on the worst-case stack usage by interrupt service +routines. + +The dedicated interrupt stack for the entire +application is supplied and initialized by the reset and +initialization code of the user's board support package. Since +all ISRs use this stack, the stack size must take into account +the worst case stack usage by any combination of nested ISRs. + +@subsection Processors without a Separate Interrupt Stack + +Some processors do not support a separate stack for +interrupts. In this case, without special assistance every +task's stack must include enough space to handle the task's +worst-case stack usage as well as the worst-case interrupt stack +usage. This is necessary because the worst-case interrupt +nesting could occur while any task is executing. + +On many processors without dedicated hardware managed +interrupt stacks, RTEMS manages a dedicated interrupt stack in +software. If this capability is supported on a CPU, then it is +logically equivalent to the processor supporting a separate +interrupt stack in hardware. + +@section Device Drivers + +Device drivers consist of control software for +special peripheral devices and provide a logical interface for +the application developer. The RTEMS I/O manager provides +directives which allow applications to access these device +drivers in a consistent fashion. A Board Support Package may +include device drivers to access the hardware on the target +platform. These devices typically include serial and parallel +ports, counter/timer peripherals, real-time clocks, disk +interfaces, and network controllers. + +For more information on device drivers, refer to the +I/O Manager chapter. + +@subsection Clock Tick Device Driver + +Most RTEMS applications will include a clock tick +device driver which invokes the @code{@value{DIRPREFIX}clock_tick} +directive at regular intervals. The clock tick is necessary if +the application is to utilize timeslicing, the clock manager, the +timer manager, the rate monotonic manager, or the timeout option on blocking +directives. + +The clock tick is usually provided as an interrupt +from a counter/timer or a real-time clock device. When a +counter/timer is used to provide the clock tick, the device is +typically programmed to operate in continuous mode. This mode +selection causes the device to automatically reload the initial +count and continue the countdown without programmer +intervention. This reduces the overhead required to manipulate +the counter/timer in the clock tick ISR and increases the +accuracy of tick occurrences. The initial count can be based on +the microseconds_per_tick field in the RTEMS Configuration +Table. An alternate approach is to set the initial count for a +fixed time period (such as one millisecond) and have the ISR +invoke @code{@value{DIRPREFIX}clock_tick} +on the microseconds_per_tick boundaries. +Obviously, this can induce some error if the configured +microseconds_per_tick is not evenly divisible by the chosen +clock interrupt quantum. + +It is important to note that the interval between +clock ticks directly impacts the granularity of RTEMS timing +operations. In addition, the frequency of clock ticks is an +important factor in the overall level of system overhead. A +high clock tick frequency results in less processor time being +available for task execution due to the increased number of +clock tick ISRs. + +@section User Extensions + +RTEMS allows the application developer to augment +selected features by invoking user-supplied extension routines +when the following system events occur: + +@itemize @bullet +@item Task creation +@item Task initiation +@item Task reinitiation +@item Task deletion +@item Task context switch +@item Post task context switch +@item Task begin +@item Task exits +@item Fatal error detection +@end itemize + +User extensions can be used to implement a wide variety of +functions including execution profiling, non-standard +coprocessor support, debug support, and error detection and +recovery. For example, the context of a non-standard numeric +coprocessor may be maintained via the user extensions. In this +example, the task creation and deletion extensions are +responsible for allocating and deallocating the context area, +the task initiation and reinitiation extensions would be +responsible for priming the context area, and the task context +switch extension would save and restore the context of the +device. + +For more information on user extensions, refer to the +User Extensions chapter. + +@section Multiprocessor Communications Interface (MPCI) + +RTEMS requires that an MPCI layer be provided when a +multiple node application is developed. This MPCI layer must +provide an efficient and reliable communications mechanism +between the multiple nodes. Tasks on different nodes +communicate and synchronize with one another via the MPCI. Each +MPCI layer must be tailored to support the architecture of the +target platform. + +For more information on the MPCI, refer to the +Multiprocessing Manager chapter. + +@subsection Tightly-Coupled Systems + +A tightly-coupled system is a multiprocessor +configuration in which the processors communicate solely via +shared global memory. The MPCI can simply place the RTEMS +packets in the shared memory space. The two primary +considerations when designing an MPCI for a tightly-coupled +system are data consistency and informing another node of a +packet. + +The data consistency problem may be solved using +atomic "test and set" operations to provide a "lock" in the +shared memory. It is important to minimize the length of time +any particular processor locks a shared data structure. + +The problem of informing another node of a packet can +be addressed using one of two techniques. The first technique +is to use an interprocessor interrupt capability to cause an +interrupt on the receiving node. This technique requires that +special support hardware be provided by either the processor +itself or the target platform. The second technique is to have +a node poll for arrival of packets. The drawback to this +technique is the overhead associated with polling. + +@subsection Loosely-Coupled Systems + +A loosely-coupled system is a multiprocessor +configuration in which the processors communicate via some type +of communications link which is not shared global memory. The +MPCI sends the RTEMS packets across the communications link to +the destination node. The characteristics of the communications +link vary widely and have a significant impact on the MPCI +layer. For example, the bandwidth of the communications link +has an obvious impact on the maximum MPCI throughput. + +The characteristics of a shared network, such as +Ethernet, lend themselves to supporting an MPCI layer. These +networks provide both the point-to-point and broadcast +capabilities which are expected by RTEMS. + +@subsection Systems with Mixed Coupling + +A mixed-coupling system is a multiprocessor +configuration in which the processors communicate via both +shared memory and communications links. A unique characteristic +of mixed-coupling systems is that a node may not have access to +all communication methods. There may be multiple shared memory +areas and communication links. Therefore, one of the primary +functions of the MPCI layer is to efficiently route RTEMS +packets between nodes. This routing may be based on numerous +algorithms. In addition, the router may provide alternate +communications paths in the event of an overload or a partial +failure. + +@subsection Heterogeneous Systems + +Designing an MPCI layer for a heterogeneous system +requires special considerations by the developer. RTEMS is +designed to eliminate many of the problems associated with +sharing data in a heterogeneous environment. The MPCI layer +need only address the representation of thirty-two (32) bit +unsigned quantities. + +For more information on supporting a heterogeneous +system, refer the Supporting Heterogeneous Environments in the +Multiprocessing Manager chapter. diff --git a/doc/user/c_user.texi b/doc/user/c_user.texi new file mode 100644 index 0000000000..4ade92d03d --- /dev/null +++ b/doc/user/c_user.texi @@ -0,0 +1,165 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename c_user.info +@syncodeindex vr fn +@synindex ky cp +@paragraphindent 0 +@c %**end of header + +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c Master file for the C User's Guide +@c + +@c Joel's Questions +@c +@c 1. Why does paragraphindent only impact makeinfo? +@c 2. Why does paragraphindent show up in HTML? +@c + +@include version.texi +@include common/setup.texi +@include common/rtems.texi + +@ifset use-ascii +@dircategory RTEMS On-Line Manual +@direntry +* RTEMS C User: (c_user). The C User's Guide. +@end direntry +@end ifset + +@c @syncodeindex fn cp +@c variable substitution info: +@c +@set is-C +@clear is-Ada +@set LANGUAGE C +@set STRUCTURE structure +@set ROUTINE function +@set OR | +@set RPREFIX RTEMS_ +@set DIRPREFIX rtems_ +@c the language is @value{LANGUAGE} +@c NOTE: don't use underscore in the name +@c + +@c +@c Title Page Stuff +@c + +@c +@c I don't really like having a short title page. --joel +@c +@c @shorttitlepage RTEMS Applications C User's Guide + +@setchapternewpage odd +@settitle RTEMS C User's Guide +@titlepage +@finalout + +@title RTEMS C User's Guide +@subtitle Edition @value{EDITION}, for RTEMS @value{VERSION} +@sp 1 +@subtitle @value{UPDATED} +@author On-Line Applications Research Corporation +@page +@include common/cpright.texi +@end titlepage + +@c This prevents a black box from being printed on "overflow" lines. +@c The alternative is to rework a sentence to avoid this problem. + +@include preface.texi +@include overview.texi +@include concepts.texi +@include datatypes.texi +@include init.texi +@include task.texi +@include intr.texi +@include clock.texi +@include timer.texi +@include sem.texi +@include msg.texi +@include event.texi +@include signal.texi +@include part.texi +@include region.texi +@include dpmem.texi +@include io.texi +@include fatal.texi +@include schedule.texi +@include rtmon.texi +@include bsp.texi +@include userext.texi +@include conf.texi +@include mp.texi +@include dirstat.texi +@include example.texi +@include glossary.texi +@ifinfo +@node Top, Preface, (dir), (dir) +@top c_user + +This is the online version of the RTEMS C User's Guide. + +@menu +* Preface:: +* Overview:: +* Key Concepts:: +* RTEMS Data Types:: +* Initialization Manager:: +* Task Manager:: +* Interrupt Manager:: +* Clock Manager:: +* Timer Manager:: +* Semaphore Manager:: +* Message Manager:: +* Event Manager:: +* Signal Manager:: +* Partition Manager:: +* Region Manager:: +* Dual-Ported Memory Manager:: +* I/O Manager:: +* Fatal Error Manager:: +* Scheduling Concepts:: +* Rate Monotonic Manager:: +* Board Support Packages:: +* User Extensions Manager:: +* Configuring a System:: +* Multiprocessing Manager:: +* Directive Status Codes:: +* Example Application:: +* Glossary:: +* Command and Variable Index:: +* Concept Index:: +@end menu + +@end ifinfo +@c +@c +@c Need to copy the emacs stuff and "trailer stuff" (index, toc) into here +@c + +@node Command and Variable Index, Concept Index, Glossary, Top +@unnumbered Command and Variable Index + +@printindex fn + +@c There are currently no Command and Variable Index entries. + +@node Concept Index, , Command and Variable Index, Top +@unnumbered Concept Index + +@c There are currently no Concept Index entries. +@printindex cp + +@contents +@bye + diff --git a/doc/user/clock.t b/doc/user/clock.t new file mode 100644 index 0000000000..24721ebe8c --- /dev/null +++ b/doc/user/clock.t @@ -0,0 +1,438 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Clock Manager + +@cindex clock + +@section Introduction + +The clock manager provides support for time of day +and other time related capabilities. The directives provided by +the clock manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}clock_set} - Set system date and time +@item @code{@value{DIRPREFIX}clock_get} - Get system date and time information +@item @code{@value{DIRPREFIX}clock_tick} - Announce a clock tick +@end itemize + +@section Background + +@subsection Required Support + +For the features provided by the clock manager to be +utilized, periodic timer interrupts are required. Therefore, a +real-time clock or hardware timer is necessary to create the +timer interrupts. The @code{@value{DIRPREFIX}clock_tick} +directive is normally called +by the timer ISR to announce to RTEMS that a system clock tick +has occurred. Elapsed time is measured in ticks. A tick is +defined to be an integral number of microseconds which is +specified by the user in the Configuration Table. + +@subsection Time and Date Data Structures + +The clock facilities of the clock manager operate +upon calendar time. These directives utilize the following date +and time @value{STRUCTURE} for the native time and date format: + + +@ifset is-C +@findex rtems_time_of_day +@example +struct rtems_tod_control @{ + rtems_unsigned32 year; /* greater than 1987 */ + rtems_unsigned32 month; /* 1 - 12 */ + rtems_unsigned32 day; /* 1 - 31 */ + rtems_unsigned32 hour; /* 0 - 23 */ + rtems_unsigned32 minute; /* 0 - 59 */ + rtems_unsigned32 second; /* 0 - 59 */ + rtems_unsigned32 ticks; /* elapsed between seconds */ +@}; + +typedef struct rtems_tod_control rtems_time_of_day; +@end example +@end ifset + +@ifset is-Ada +@example +type Time_Of_Day is + record + Year : RTEMS.Unsigned32; -- year, A.D. + Month : RTEMS.Unsigned32; -- month, 1 .. 12 + Day : RTEMS.Unsigned32; -- day, 1 .. 31 + Hour : RTEMS.Unsigned32; -- hour, 0 .. 23 + Minute : RTEMS.Unsigned32; -- minute, 0 .. 59 + Second : RTEMS.Unsigned32; -- second, 0 .. 59 + Ticks : RTEMS.Unsigned32; -- elapsed ticks between seconds + end record; +@end example +@end ifset + + +The native date and time format is the only format +supported when setting the system date and time using the +@code{@value{DIRPREFIX}clock_get} directive. Some applications +expect to operate on a "UNIX-style" date and time data structure. The +@code{@value{DIRPREFIX}clock_get} directive can optionally return +the current date and time in the +following @value{STRUCTURE}: + +@ifset is-C +@example +@group +typedef struct @{ + rtems_unsigned32 seconds; /* seconds since RTEMS epoch*/ + rtems_unsigned32 microseconds; /* since last second */ +@} rtems_clock_time_value; +@end group +@end example +@end ifset + +@ifset is-Ada +@example +type Clock_Time_Value is + record + Seconds : Unsigned32; + Microseconds : Unsigned32; + end record; +@end example +@end ifset + +The seconds field in this @value{STRUCTURE} is the number of +seconds since the RTEMS epoch of January 1, 1988. + +@subsection Clock Tick and Timeslicing + +@cindex timeslicing + +Timeslicing is a task scheduling discipline in which +tasks of equal priority are executed for a specific period of +time before control of the CPU is passed to another task. It is +also sometimes referred to as the automatic round-robin +scheduling algorithm. The length of time allocated to each task +is known as the quantum or timeslice. + +The system's timeslice is defined as an integral +number of ticks, and is specified in the Configuration Table. +The timeslice is defined for the entire system of tasks, but +timeslicing is enabled and disabled on a per task basis. + +The @code{@value{DIRPREFIX}clock_tick} +directive implements timeslicing by +decrementing the running task's time-remaining counter when both +timeslicing and preemption are enabled. If the task's timeslice +has expired, then that task will be preempted if there exists a +ready task of equal priority. + +@subsection Delays + +@cindex delays + +A sleep timer allows a task to delay for a given +interval or up until a given time, and then wake and continue +execution. This type of timer is created automatically by the +@code{@value{DIRPREFIX}task_wake_after} +and @code{@value{DIRPREFIX}task_wake_when} directives and, as a result, +does not have an RTEMS ID. Once activated, a sleep timer cannot +be explicitly deleted. Each task may activate one and only one +sleep timer at a time. + +@subsection Timeouts + +@cindex timeouts + +Timeouts are a special type of timer automatically +created when the timeout option is used on the +@code{@value{DIRPREFIX}message_queue_receive}, +@code{@value{DIRPREFIX}event_receive}, +@code{@value{DIRPREFIX}semaphore_obtain} and +@code{@value{DIRPREFIX}region_get_segment} directives. +Each task may have one and only one timeout active at a time. +When a timeout expires, it unblocks the task with a timeout status code. + +@section Operations + +@subsection Announcing a Tick + +RTEMS provides the @code{@value{DIRPREFIX}clock_tick} directive which is +called from the user's real-time clock ISR to inform RTEMS that +a tick has elapsed. The tick frequency value, defined in +microseconds, is a configuration parameter found in the +Configuration Table. RTEMS divides one million microseconds +(one second) by the number of microseconds per tick to determine +the number of calls to the +@code{@value{DIRPREFIX}clock_tick} directive per second. The +frequency of @code{@value{DIRPREFIX}clock_tick} +calls determines the resolution +(granularity) for all time dependent RTEMS actions. For +example, calling @code{@value{DIRPREFIX}clock_tick} +ten times per second yields a higher +resolution than calling @code{@value{DIRPREFIX}clock_tick} +two times per second. The @code{@value{DIRPREFIX}clock_tick} +directive is responsible for maintaining both +calendar time and the dynamic set of timers. + +@subsection Setting the Time + +The @code{@value{DIRPREFIX}clock_set} directive allows a task or an ISR to +set the date and time maintained by RTEMS. If setting the date +and time causes any outstanding timers to pass their deadline, +then the expired timers will be fired during the invocation of +the @code{@value{DIRPREFIX}clock_set} directive. + +@subsection Obtaining the Time + +The @code{@value{DIRPREFIX}clock_get} directive allows a task or an ISR to +obtain the current date and time or date and time related +information. The current date and time can be returned in +either native or UNIX-style format. Additionally, the +application can obtain date and time related information such as +the number of seconds since the RTEMS epoch, the number of ticks +since the executive was initialized, and the number of ticks per +second. The information returned by the +@code{@value{DIRPREFIX}clock_get} directive is +dependent on the option selected by the caller. This +is specified using one of the following constants +associated with the enumerated type +@code{@value{DIRPREFIX}clock_get_options}: + +@findex rtems_clock_get_options + +@itemize @bullet +@item @code{@value{RPREFIX}CLOCK_GET_TOD} - obtain native style date and time + +@item @code{@value{RPREFIX}CLOCK_GET_TIME_VALUE} - obtain UNIX-style +date and time + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_SINCE_BOOT} - obtain number of ticks +since RTEMS was initialized + +@item @code{@value{RPREFIX}CLOCK_GET_SECONDS_SINCE_EPOCH} - obtain number +of seconds since RTEMS epoch + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_PER_SECOND} - obtain number of clock +ticks per second + +@end itemize + +Calendar time operations will return an error code if +invoked before the date and time have been set. + +@section Directives + +This section details the clock manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection CLOCK_SET - Set system date and time + +@subheading CALLING SEQUENCE: + +@cindex set the time of day + +@ifset is-C +@findex rtems_clock_set +@example +rtems_status_code rtems_clock_set( + rtems_time_of_day *time_buffer +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Clock_Set ( + Time_Buffer : in RTEMS.Time_Of_Day; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - date and time set successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{time_buffer} is NULL@* +@code{@value{RPREFIX}INVALID_TIME_OF_DAY} - invalid time of day + +@subheading DESCRIPTION: + +This directive sets the system date and time. The +date, time, and ticks in the time_buffer @value{STRUCTURE} are all +range-checked, and an error is returned if any one is out of its +valid range. + +@subheading NOTES: + +Years before 1988 are invalid. + +The system date and time are based on the configured +tick rate (number of microseconds in a tick). + +Setting the time forward may cause a higher priority +task, blocked waiting on a specific time, to be made ready. In +this case, the calling task will be preempted after the next +clock tick. + +Re-initializing RTEMS causes the system date and time +to be reset to an uninitialized state. Another call to +@code{@value{DIRPREFIX}clock_set} is required to re-initialize +the system date and time to application specific specifications. + +@c +@c +@c +@page +@subsection CLOCK_GET - Get system date and time information + +@cindex obtain the time of day + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_clock_get +@example +rtems_status_code rtems_clock_get( + rtems_clock_get_options option, + void *time_buffer +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Clock_Get ( + Option : in RTEMS.Clock_Get_Options; + Time_Buffer : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - current time obtained successfully@* +@code{@value{RPREFIX}NOT_DEFINED} - system date and time is not set@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{time_buffer} is NULL + +@subheading DESCRIPTION: + +This directive obtains the system date and time. If +the caller is attempting to obtain the date and time (i.e. +option is set to either @code{@value{RPREFIX}CLOCK_GET_SECONDS_SINCE_EPOCH}, +@code{@value{RPREFIX}CLOCK_GET_TOD}, or +@code{@value{RPREFIX}CLOCK_GET_TIME_VALUE}) and the date and time +has not been set with a previous call to +@code{@value{DIRPREFIX}clock_set}, then the +@code{@value{RPREFIX}NOT_DEFINED} status code is returned. +The caller can always obtain the number of ticks per second (option is +@code{@value{RPREFIX}CLOCK_GET_TICKS_PER_SECOND}) and the number of +ticks since the executive was initialized option is +@code{@value{RPREFIX}CLOCK_GET_TICKS_SINCE_BOOT}). + +The @code{option} argument may taken on any value of the enumerated +type @code{rtems_clock_get_options}. The data type expected for +@code{time_buffer} is based on the value of @code{option} as +indicated below: + +@findex rtems_clock_get_options +@ifset is-C +@itemize @bullet +@item @code{@value{RPREFIX}CLOCK_GET_TOD} - (rtems_time_of_day *) + +@item @code{@value{RPREFIX}CLOCK_GET_TIME_VALUE} - (rtems_clock_time_value *) + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_SINCE_BOOT} - (rtems_interval *) + +@item @code{@value{RPREFIX}CLOCK_GET_SECONDS_SINCE_EPOCH} - (rtems_interval *) + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_PER_SECOND} - (rtems_interval *) + +@end itemize +@end ifset + +@ifset is-Ada +@itemize @bullet +@item @code{@value{RPREFIX}CLOCK_GET_TOD} - Address of an variable of +type RTEMS.Time_Of_Day + +@item @code{@value{RPREFIX}CLOCK_GET_TIME_VALUE} - Address of an variable of +type RTEMS.Clock_Time_Value + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_SINCE_BOOT} - Address of an +variable of type RTEMS.Interval + +@item @code{@value{RPREFIX}CLOCK_GET_SECONDS_SINCE_EPOCH} - Address of an +variable of type RTEMS.Interval + +@item @code{@value{RPREFIX}CLOCK_GET_TICKS_PER_SECOND} - Address of an +variable of type RTEMS.Interval + +@end itemize +@end ifset + +@subheading NOTES: + +This directive is callable from an ISR. + +This directive will not cause the running task to be +preempted. Re-initializing RTEMS causes the system date and +time to be reset to an uninitialized state. Another call to +@code{@value{DIRPREFIX}clock_set} is required to re-initialize the +system date and time to application specific specifications. + +@c +@c +@c +@page +@subsection CLOCK_TICK - Announce a clock tick + +@cindex clock tick + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_clock_tick +@example +rtems_status_code rtems_clock_tick( void ); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Clock_Tick ( + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - clock tick processed successfully + +@subheading DESCRIPTION: + +This directive announces to RTEMS that a system clock +tick has occurred. The directive is usually called from the +timer interrupt ISR of the local processor. This directive +maintains the system date and time, decrements timers for +delayed tasks, timeouts, rate monotonic periods, and implements +timeslicing. + +@subheading NOTES: + +This directive is typically called from an ISR. + +The microseconds_per_tick and ticks_per_timeslice +parameters in the Configuration Table contain the number of +microseconds per tick and number of ticks per timeslice, +respectively. + diff --git a/doc/user/concepts.t b/doc/user/concepts.t new file mode 100644 index 0000000000..adf8986e62 --- /dev/null +++ b/doc/user/concepts.t @@ -0,0 +1,361 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c The following figure was replaced with an ASCII equivalent. +@c Figure 2-1 Object ID Composition +@c + +@chapter Key Concepts + +@section Introduction + +The facilities provided by RTEMS are built upon a +foundation of very powerful concepts. These concepts must be +understood before the application developer can efficiently +utilize RTEMS. The purpose of this chapter is to familiarize +one with these concepts. + +@section Objects + +@cindex objects + +RTEMS provides directives which can be used to +dynamically create, delete, and manipulate a set of predefined +object types. These types include tasks, message queues, +semaphores, memory regions, memory partitions, timers, ports, +and rate monotonic periods. The object-oriented nature of RTEMS +encourages the creation of modular applications built upon +re-usable "building block" routines. + +All objects are created on the local node as required +by the application and have an RTEMS assigned ID. All objects +have a user-assigned name. Although a relationship exists +between an object's name and its RTEMS assigned ID, the name and +ID are not identical. Object names are completely arbitrary and +selected by the user as a meaningful "tag" which may commonly +reflect the object's use in the application. Conversely, object +IDs are designed to facilitate efficient object manipulation by +the executive. + +@subsection Object Names + +@cindex object name +@findex rtems_object_name + +An object name is an unsigned thirty-two bit entity +associated with the object by the user. The data type +@code{@value{DIRPREFIX}name} is used to store object names. + +@findex rtems_build_name + +Although not required by RTEMS, object names are often +composed of four ASCII characters which help identify that object. +For example, a task which causes a light to blink might be +called "LITE". The @code{@value{DIRPREFIX}build_name} routine +is provided to build an object name from four ASCII characters. +@ifset is-C +The following example illustrates this: + +@example +rtems_object_name my_name; + +my_name = rtems_build_name( 'L', 'I', 'T', 'E' ); +@end example +@end ifset + +However, it is not required that the application use ASCII +characters to build object names. For example, if an +application requires one-hundred tasks, it would be difficult to +assign meaningful ASCII names to each task. A more convenient +approach would be to name them the binary values one through +one-hundred, respectively. + +@subsection Object IDs + +@cindex object ID +@cindex object ID composition +@findex rtems_id + +@need 3000 + +An object ID is a unique unsigned thirty-two bit +entity composed of three parts: object class, node, and index. +The data type @code{@value{DIRPREFIX}id} is used to store object IDs. + + +@ifset use-ascii +@example +@group + 31 26 25 16 15 0 + +-----------+------------------+-------------------------------+ + | | | | + | Class | Node | Index | + | | | | + +-----------+------------------+-------------------------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\strut#& +\hbox to 0.50in{\enskip#}& +\hbox to 0.50in{\enskip#}& +#& +\hbox to 0.50in{\enskip#}& +\hbox to 0.50in{\enskip#}& +#& +\hbox to 1.00in{\enskip#}& +\hbox to 1.00in{\enskip#}& +#\cr +\multispan{9}\cr +\multispan{2}31\hfil&\multispan{2}\hfil26\enskip& + \multispan{1}\enskip25\hfil&\multispan{2}\hfil16\enskip& + \multispan{1}\enskip15\hfil&\multispan{2}\hfil0\cr +&&&&&&&&&\cr +}}\hfil} +\centerline{\vbox{\offinterlineskip\halign{ +\strut\vrule#& +\hbox to 0.50in{\enskip#}& +\hbox to 0.50in{\enskip#}& +\vrule#& +\hbox to 0.50in{\enskip#}& +\hbox to 0.50in{\enskip#}& +\vrule#& +\hbox to 0.50in{\enskip#}& +\hbox to 0.50in{\enskip#}& +\vrule#\cr +\multispan{9}\cr +\noalign{\hrule} +&&&&&&&&&\cr +&\multispan{2}\hfil Class\hfil&& + \multispan{2}\hfil Node\hfil&& + \multispan{2}\hfil Index\hfil&\cr +&&&&&&&&&\cr +\noalign{\hrule} +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=6 WIDTH="60%" BORDER=0> +<TR><TD ALIGN=left><STRONG>31</STRONG></TD> + <TD ALIGN=right><STRONG>26</STRONG></TD> + <TD ALIGN=left><STRONG>25</STRONG></TD> + <TD ALIGN=right><STRONG>16</STRONG></TD> + <TD ALIGN=left><STRONG>15</STRONG></TD> + <TD ALIGN=right><STRONG>0</STRONG></TD></TR> + </TABLE> +</CENTER> +<CENTER> + <TABLE COLS=6 WIDTH="60%" BORDER=2> +<TR><TD ALIGN=center COLSPAN=2>Class</TD> + <TD ALIGN=center COLSPAN=2>Node</TD> + <TD ALIGN=center COLSPAN=2>Index</TD></TD> + </TABLE> +</CENTER> +@end html +@end ifset + +The most significant six bits are the object class. The next +ten bits are the number of the node on which this object was +created. The node number is always one (1) in a single +processor system. The least significant sixteen bits form an +identifier within a particular object type. This identifier, +called the object index, ranges in value from 1 to the maximum +number of objects configured for this object type. + + +The three components of an object ID make it possible +to quickly locate any object in even the most complicated +multiprocessor system. Object ID's are associated with an +object by RTEMS when the object is created and the corresponding +ID is returned by the appropriate object create directive. The +object ID is required as input to all directives involving +objects, except those which create an object or obtain the ID of +an object. + +The object identification directives can be used to +dynamically obtain a particular object's ID given its name. +This mapping is accomplished by searching the name table +associated with this object type. If the name is non-unique, +then the ID associated with the first occurrence of the name +will be returned to the application. Since object IDs are +returned when the object is created, the object identification +directives are not necessary in a properly designed single +processor application. + +In addition, services are provided to portably examine the +three subcomponents of an RTEMS ID. These services are +prototyped as follows: + +@cindex obtaining class from object ID +@cindex obtaining node from object ID +@cindex obtaining index from object ID +@cindex get class from object ID +@cindex get node from object ID +@cindex get index from object ID +@findex rtems_get_class +@findex rtems_get_node +@findex rtems_get_index + +@example +rtems_unsigned32 rtems_get_class( rtems_id ); +rtems_unsigned32 rtems_get_node( rtems_id ); +rtems_unsigned32 rtems_get_index( rtems_id ); +@end example + +An object control block is a data structure defined +by RTEMS which contains the information necessary to manage a +particular object type. For efficiency reasons, the format of +each object type's control block is different. However, many of +the fields are similar in function. The number of each type of +control block is application dependent and determined by the +values specified in the user's Configuration Table. An object +control block is allocated at object create time and freed when +the object is deleted. With the exception of user extension +routines, object control blocks are not directly manipulated by +user applications. + +@section Communication and Synchronization + +@cindex communication and synchronization + +In real-time multitasking applications, the ability +for cooperating execution threads to communicate and synchronize +with each other is imperative. A real-time executive should +provide an application with the following capabilities: + +@itemize @bullet +@item Data transfer between cooperating tasks +@item Data transfer between tasks and ISRs +@item Synchronization of cooperating tasks +@item Synchronization of tasks and ISRs +@end itemize + +Most RTEMS managers can be used to provide some form +of communication and/or synchronization. However, managers +dedicated specifically to communication and synchronization +provide well established mechanisms which directly map to the +application's varying needs. This level of flexibility allows +the application designer to match the features of a particular +manager with the complexity of communication and synchronization +required. The following managers were specifically designed for +communication and synchronization: + +@itemize @bullet +@item Semaphore +@item Message Queue +@item Event +@item Signal +@end itemize + +The semaphore manager supports mutual exclusion +involving the synchronization of access to one or more shared +user resources. Binary semaphores may utilize the optional +priority inheritance algorithm to avoid the problem of priority +inversion. The message manager supports both communication and +synchronization, while the event manager primarily provides a +high performance synchronization mechanism. The signal manager +supports only asynchronous communication and is typically used +for exception handling. + +@section Time + +@cindex time + +The development of responsive real-time applications +requires an understanding of how RTEMS maintains and supports +time-related operations. The basic unit of time in RTEMS is +known as a tick. The frequency of clock ticks is completely +application dependent and determines the granularity and +accuracy of all interval and calendar time operations. + +@findex rtems_interval + +By tracking time in units of ticks, RTEMS is capable +of supporting interval timing functions such as task delays, +timeouts, timeslicing, the delayed execution of timer service +routines, and the rate monotonic scheduling of tasks. An +interval is defined as a number of ticks relative to the current +time. For example, when a task delays for an interval of ten +ticks, it is implied that the task will not execute until ten +clock ticks have occurred. +All intervals are specified using data type +@code{@value{DIRPREFIX}interval}. + +A characteristic of interval timing is that the +actual interval period may be a fraction of a tick less than the +interval requested. This occurs because the time at which the +delay timer is set up occurs at some time between two clock +ticks. Therefore, the first countdown tick occurs in less than +the complete time interval for a tick. This can be a problem if +the clock granularity is large. + +The rate monotonic scheduling algorithm is a hard +real-time scheduling methodology. This methodology provides +rules which allows one to guarantee that a set of independent +periodic tasks will always meet their deadlines -- even under +transient overload conditions. The rate monotonic manager +provides directives built upon the Clock Manager's interval +timer support routines. + +Interval timing is not sufficient for the many +applications which require that time be kept in wall time or +true calendar form. Consequently, RTEMS maintains the current +date and time. This allows selected time operations to be +scheduled at an actual calendar date and time. For example, a +task could request to delay until midnight on New Year's Eve +before lowering the ball at Times Square. +The data type @code{@value{DIRPREFIX}time_of_day} is used to specify +calendar time in RTEMS services. +@xref{Clock Manager Time and Date Data Structures, , Time and Date Data Structures}. +@findex rtems_time_of_day + +Obviously, the directives which use intervals or wall +time cannot operate without some external mechanism which +provides a periodic clock tick. This clock tick is typically +provided by a real time clock or counter/timer device. + +@section Memory Management + +@cindex memory management + +RTEMS memory management facilities can be grouped +into two classes: dynamic memory allocation and address +translation. Dynamic memory allocation is required by +applications whose memory requirements vary through the +application's course of execution. Address translation is +needed by applications which share memory with another CPU or an +intelligent Input/Output processor. The following RTEMS +managers provide facilities to manage memory: + +@itemize @bullet +@item Region + +@item Partition + +@item Dual Ported Memory +@end itemize + +RTEMS memory management features allow an application +to create simple memory pools of fixed size buffers and/or more +complex memory pools of variable size segments. The partition +manager provides directives to manage and maintain pools of +fixed size entities such as resource control blocks. +Alternatively, the region manager provides a more general +purpose memory allocation scheme that supports variable size +blocks of memory which are dynamically obtained and freed by the +application. The dual-ported memory manager provides executive +support for address translation between internal and external +dual-ported RAM address space. diff --git a/doc/user/conf.t b/doc/user/conf.t new file mode 100644 index 0000000000..c931c4ea65 --- /dev/null +++ b/doc/user/conf.t @@ -0,0 +1,2028 @@ +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c The following macros from confdefs.h have not been discussed in this +@c chapter: +@c +@c CONFIGURE_NEWLIB_EXTENSION - probably not needed +@c CONFIGURE_MALLOC_REGION - probably not needed +@c CONFIGURE_LIBIO_SEMAPHORES - implicitly discussed. +@c CONFIGURE_INTERRUPT_STACK_MEMORY +@c CONFIGURE_GNAT_RTEMS +@c CONFIGURE_GNAT_MUTEXES +@c CONFIGURE_GNAT_KEYS +@c CONFIGURE_MAXIMUM_ADA_TASKS +@c CONFIGURE_MAXIMUM_FAKE_ADA_TASKS +@c CONFIGURE_ADA_TASKS_STACK +@c +@c In addition, there should be examples of defining your own +@c Device Driver Table, Init task table, etc. +@c +@c Regardless, this is a big step up. :) +@c + +@chapter Configuring a System + +@section Introduction + +RTEMS must be configured for an application. This configuration +information encompasses a variety of information including +the length of each clock tick, the maximum number of each RTEMS +object that can be created, the application initialization tasks, +and the device drivers in the application. This information +is placed in data structures that are given to RTEMS at +system initialization time. This chapter details the +format of these data structures as well as a simpler +mechanism to automate the generation of these structures. + + +@section Automatic Generation of System Configuration + +@cindex confdefs.h +@findex confdefs.h + +RTEMS provides the @code{confdefs.h} C language header file that +based on the setting of a variety of macros can automatically +produce nearly all of the configuration tables required +by an RTEMS application. Rather than building the individual +tables by hand, the application simply specifies the values +for the configuration parameters it wishes to set. In the following +example, the configuration information for a simple system with +a message queue and a time slice of 50 milliseconds is configured: + +@example +@group +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */ +#define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */ + +#define CONFIGURE_MAXIMUM_TASKS 4 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +@end group +@end example + +This system will begin execution with the single initialization task +named @code{Init}. It will be configured to have both a console +device driver (for standard I/O) and a clock tick device driver. + +For each configuration parameter in the configuration tables, the +macro corresponding to that field is discussed. Most systems +can be easily configured using the @code{confdefs.h} mechanism. + +The @code{CONFIGURE_INIT} constant must be defined in order to +make @code{confdefs.h} instantiate the configuration data +structures. This can only be defined in one source file per +application that includes @code{confdefs.h} or the symbol +table will be instantiated multiple times and linking errors +produced. + +The user should be aware that the defaults are intentionally +set as low as possible. By default, no application resources +are configured. The @code{confdefs.h} file ensures that +at least one application tasks or thread is configured +and that at least one of the initialization task/thread +tables is configured. + +The @code{confdefs.h} file estimates the amount of +memory required for the RTEMS Executive Workspace. This +estimate is only as accurate as the information given +to @code{confdefs.h} and may be either too high or too +low for a variety of reasons. Some of the reasons that +@code{confdefs.h} may reserve too much memory for RTEMS +are: + +@itemize @bullet +@item All tasks/threads are assumed to be floating point. +@end itemize + +Conversely, there are many more reasons, the resource +estimate could be too low: + +@itemize @bullet +@item Task/thread stacks greater than minimum size must be +accounted for explicitly by developer. + +@item Memory for messages is not included. + +@item Device driver requirements are not included. + + +@item Network stack requirements are not included. + +@item Requirements for add-on libraries are not included. +@end itemize + +In general, @code{confdefs.h} is very accurate when given +enough information. However, it is quite easy to use +a library and not account for its resources. + +The following subsection list all of the constants which can be +set by the user. + +@subsection Library Support Definitions + +This section defines the file system and IO library +related configuration parameters supported by +@code{confdefs.h}. + +@itemize @bullet +@findex CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS +@item @code{CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS} is set to the +maximum number of files that can be concurrently open. Libio requires +a Classic RTEMS semaphore for each file descriptor as well as one +global one. The default value is 3 file descriptors which is +enough to support standard input, output, and error output. + +@findex CONFIGURE_TERMIOS_DISABLED +@item @code{CONFIGURE_TERMIOS_DISABLED} is defined if the +software implementing POSIX termios functionality is +not going to be used by this application. By default, this +is not defined and resources are reserved for the +termios functionality. + +@findex CONFIGURE_NUMBER_OF_TERMIOS_PORTS +@item @code{CONFIGURE_NUMBER_OF_TERMIOS_PORTS} is set to the +number of ports using the termios functionality. Each +concurrently active termios port requires resources. +By default, this is set to 1 so a console port can be +used. + +@findex CONFIGURE_HAS_OWN_MOUNT_TABLE +@item @code{CONFIGURE_HAS_OWN_MOUNT_TABLE} is defined when the +application provides their own filesystem mount table. The +mount table is an array of @code{rtems_filesystem_mount_table_t} +entries pointed to by the global variable +@code{rtems_filesystem_mount_table}. The number of +entries in this table is in an integer variable named +@code{rtems_filesystem_mount_table_t}. + +@findex CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM +@item @code{CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM} is defined +if the application wishes to use the full functionality +IMFS. By default, the miniIMFS is used. The miniIMFS +is a minimal functionality subset of the In-Memory +FileSystem (IMFS). The miniIMFS is comparable +in functionality to the pseudo-filesystem name space provided +before RTEMS release 4.5.0. The miniIMFS supports +only directories and device nodes and is smaller in executable +code size than the full IMFS. + +@findex STACK_CHECKER_ON +@item @code{STACK_CHECKER_ON} is defined when the application +wishes to enable run-time stack bounds checking. This increases +the time required to create tasks as well as adding overhead +to each context switch. By default, this is not defined and +thus stack checking is disabled. + +@end itemize + +@subsection Basic System Information + +This section defines the general system configuration parameters supported by +@code{confdefs.h}. + +@itemize @bullet +@findex CONFIGURE_HAS_OWN_CONFIGURATION_TABLE +@item @code{CONFIGURE_HAS_OWN_CONFIGURATION_TABLE} should only be defined +if the application is providing their own complete set of configuration +tables. + +@findex CONFIGURE_INTERRUPT_STACK_MEMORY +@item @code{CONFIGURE_INTERRUPT_STACK_MEMORY} is set to the +size of the interrupt stack. The interrupt stack size is +usually set by the BSP but since this memory is allocated +from the RTEMS Ram Workspace, it must be accounted for. The +default for this field is RTEMS_MINIMUM_STACK_SIZE. [NOTE: +At this time, changing this constant does NOT change the +size of the interrupt stack, only the amount of memory +reserved for it.] + +@findex CONFIGURE_EXECUTIVE_RAM_WORK_AREA +@item @code{CONFIGURE_EXECUTIVE_RAM_WORK_AREA} is the base +address of the RTEMS RAM Workspace. By default, this value +is NULL indicating that the BSP is to determine the location +of the RTEMS RAM Workspace. + +@findex CONFIGURE_MICROSECONDS_PER_TICK +@item @code{CONFIGURE_MICROSECONDS_PER_TICK} is the length +of time between clock ticks. By default, this is set to +10000 microseconds. + +@findex CONFIGURE_TICKS_PER_TIMESLICE +@item @code{CONFIGURE_TICKS_PER_TIMESLICE} is the number +of ticks per each task's timeslice. By default, this is +50. + +@findex CONFIGURE_MEMORY_OVERHEAD +@item @code{CONFIGURE_MEMORY_OVERHEAD} is set to the number of +bytes the applications wishes to add to the requirements calculated +by @code{confdefs.h}. The default value is 0. + +@findex CONFIGURE_EXTRA_TASK_STACKS +@item @code{CONFIGURE_EXTRA_TASK_STACKS} is set to the number of +bytes the applications wishes to add to the task stack requirements +calculated by @code{confdefs.h}. This parameter is very important. +If the application creates tasks with stacks larger then the +minimum, then that memory is NOT accounted for by @code{confdefs.h}. +The default value is 0. + +@end itemize + +NOTE: The required size of the Executive RAM Work Area is calculated +automatically when using the @code{confdefs.h} mechanism. + +@subsection Device Driver Table + +This section defines the configuration parameters related +to the automatic generation of a Device Driver Table. As +@code{confdefs.h} only is aware of a small set of +standard device drivers, the generated Device Driver +Table is suitable for simple applications with no +custom device drivers. + +@itemize @bullet +@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE +@item @code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if +the application wishes to provide their own Device Driver Table. +The table generated is an array of @code{rtems_driver_address_table} +entries named @code{Device_drivers}. By default, this is not +defined indicating the @code{confdefs.h} is providing the +device driver table. + +@findex CONFIGURE_MAXIMUM_DRIVERS +@item @code{CONFIGURE_MAXIMUM_DRIVERS} is defined +as the number of device drivers per node. By default, this is +set to 10. + +@findex CONFIGURE_MAXIMUM_DEVICES +@item @code{CONFIGURE_MAXIMUM_DEVICES} is defined +to the number of individual devices that may be registered +in the system. By default, this is set to 20. + +@findex CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +@item @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} +is defined +if the application wishes to include the Console Device Driver. +This device driver is responsible for providing standard input +and output using "/dev/console". By default, this is not +defined. + +@findex CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +@item @code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER} +is defined +if the application wishes to include the Console Device Driver. +This device driver is responsible for providing standard input +and output using "/dev/console". By default, this is not +defined. + +@findex CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER +@item @code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER} +is defined if the application wishes to include the Timer Driver. +This device driver is used to benchmark execution times +by the RTEMS Timing Test Suites. By default, this is not +defined. + +@c @item @code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER} +@c is defined +@c if the application wishes to include the Real-Time Clock Driver. +@c By default, this is not defined. + +@findex CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER +@item @code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER} +is defined if the application wishes to include the Stub Device Driver. +This device driver simply provides entry points that return +successful and is primarily a test fixture. +By default, this is not defined. + +@end itemize + +@subsection Multiprocessing Configuration + +This section defines the multiprocessing related +system configuration parameters supported by @code{confdefs.h}. +This class of Configuration Constants are only applicable if +@code{CONFIGURE_MP_APPLICATION} is defined. + +@itemize @bullet +@findex CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE +@item @code{CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE} is defined +if the application wishes to provide their own Multiprocessing +Configuration Table. The generated table is named +@code{Multiprocessing_configuration}. By default, this +is not defined. + +@findex CONFIGURE_MP_NODE_NUMBER +@item @code{CONFIGURE_MP_NODE_NUMBER} is the node number of +this node in a multiprocessor system. The default node number +is @code{NODE_NUMBER} which is set directly in RTEMS test Makefiles. + +@findex CONFIGURE_MP_MAXIMUM_NODES +@item @code{CONFIGURE_MP_MAXIMUM_NODES} is the maximum number +of nodes in a multiprocessor system. The default is 2. + +@findex CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS +@item @code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS} +is the maximum number +of concurrently active global objects in a multiprocessor +system. The default is 32. + +@findex CONFIGURE_MP_MAXIMUM_PROXIES +@item @code{CONFIGURE_MP_MAXIMUM_PROXIES} is the maximum number +of concurrently active thread/task proxies in a multiprocessor +system. The default is 32. + +@findex CONFIGURE_MP_MPCI_TABLE_POINTER +@item @code{CONFIGURE_MP_MPCI_TABLE_POINTER} is the pointer +to the MPCI Configuration Table. The default value of +this field is @code{&MPCI_table}. +@end itemize + +@subsection Classic API Configuration + +This section defines the Classic API related +system configuration parameters supported by @code{confdefs.h}. + +@itemize @bullet +@findex CONFIGURE_MAXIMUM_TASKS +@item @code{CONFIGURE_MAXIMUM_TASKS} is the maximum number of +Classic API tasks that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_TIMERS +@item @code{CONFIGURE_MAXIMUM_TIMERS} is the maximum number of +Classic API timers that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_SEMAPHORES +@item @code{CONFIGURE_MAXIMUM_SEMAPHORES} is the maximum number of +Classic API semaphores that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_MESSAGE_QUEUES +@item @code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES} is the maximum number of +Classic API message queues that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_PARTITIONS +@item @code{CONFIGURE_MAXIMUM_PARTITIONS} is the maximum number of +Classic API partitions that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_REGIONS +@item @code{CONFIGURE_MAXIMUM_REGIONS} is the maximum number of +Classic API regions that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_PORTS +@item @code{CONFIGURE_MAXIMUM_PORTS} is the maximum number of +Classic API ports that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_PERIODS +@item @code{CONFIGURE_MAXIMUM_PERIODS} is the maximum number of +Classic API rate monotonic periods that can be concurrently active. +The default for this field is 0. + +@findex CONFIGURE_MAXIMUM_USER_EXTENSIONS +@item @code{CONFIGURE_MAXIMUM_USER_EXTENSIONS} is the maximum number of +Classic API user extensions that can be concurrently active. +The default for this field is 0. + +@end itemize + +@subsection Classic API Initialization Tasks Table Configuration + +The @code{confdefs.h} configuration system can automatically +generate an Initialization Tasks Table named +@code{Initialization_tasks} with a single entry. The following +parameters control the generation of that table. + +@itemize @bullet +@findex CONFIGURE_RTEMS_INIT_TASKS_TABLE +@item @code{CONFIGURE_RTEMS_INIT_TASKS_TABLE} is defined +if the user wishes to use a Classic RTEMS API Initialization +Task Table. The application may choose to use the initialization +tasks or threads table from another API. By default, this +field is not defined as the user MUST select their own +API for initialization tasks. + +@findex CONFIGURE_HAS_OWN_INIT_TASK_TABLE +@item @code{CONFIGURE_HAS_OWN_INIT_TASK_TABLE} is defined +if the user wishes to define their own Classic API Initialization +Tasks Table. This table should be named @code{Initialization_tasks}. +By default, this is not defined. + +@findex CONFIGURE_INIT_TASK_NAME +@item @code{CONFIGURE_INIT_TASK_NAME} is the name +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is @code{rtems_build_name( 'U', 'I', '1', ' ' )}. + +@findex CONFIGURE_INIT_TASK_STACK_SIZE +@item @code{CONFIGURE_INIT_TASK_STACK_SIZE} +is the stack size +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is @code{RTEMS_MINIMUM_STACK_SIZE}. + +@findex CONFIGURE_INIT_TASK_PRIORITY +@item @code{CONFIGURE_INIT_TASK_PRIORITY} +is the initial priority +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is 1 which is the highest priority +in the Classic API. + +@findex CONFIGURE_INIT_TASK_ATTRIBUTES +@item @code{CONFIGURE_INIT_TASK_ATTRIBUTES} +is the task attributes +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is @code{RTEMS_DEFAULT_ATTRIBUTES}. + +@findex CONFIGURE_INIT_TASK_ENTRY_POINT +@item @code{CONFIGURE_INIT_TASK_ENTRY_POINT} +is the entry point (a.k.a. function name) +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is @code{Init}. + +@findex CONFIGURE_INIT_TASK_INITIAL_MODES +@item @code{CONFIGURE_INIT_TASK_INITIAL_MODES} +is the initial execution mode +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is @code{RTEMS_NO_PREEMPT}. + +@findex CONFIGURE_INIT_TASK_ARGUMENTS +@item @code{CONFIGURE_INIT_TASK_ARGUMENTS} +is the task argument +of the single initialization task defined by the +Classic API Initialization Tasks Table. By default +the value is 0. + +@end itemize + + +@subsection POSIX API Configuration + +The parameters in this section are used to configure resources +for the RTEMS POSIX API. They are only relevant if the POSIX API +is enabled at configure time using the @code{--enable-posix} option. + +@itemize @bullet +@findex CONFIGURE_MAXIMUM_POSIX_THREADS +@item @code{CONFIGURE_MAXIMUM_POSIX_THREADS} is the maximum number of +POSIX API threads that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_MUTEXES +@item @code{CONFIGURE_MAXIMUM_POSIX_MUTEXES} is the maximum number of +POSIX API mutexes that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +@item @code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES} is the maximum number of +POSIX API condition variables that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_KEYS +@item @code{CONFIGURE_MAXIMUM_POSIX_KEYS} is the maximum number of +POSIX API keys that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_TIMERS +@item @code{CONFIGURE_MAXIMUM_POSIX_TIMERS} is the maximum number of +POSIX API timers that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS +@item @code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS} is the maximum number of +POSIX API queued signals that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES +@item @code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES} is the maximum number of +POSIX API message queues that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_POSIX_SEMAPHORES +@item @code{CONFIGURE_MAXIMUM_POSIX_SEMAPHORES} is the maximum number of +POSIX API semaphores that can be concurrently active. +The default is 0. + +@end itemize + +@subsection POSIX Initialization Threads Table Configuration + +The @code{confdefs.h} configuration system can automatically +generate a POSIX Initialization Threads Table named +@code{POSIX_Initialization_threads} with a single entry. The following +parameters control the generation of that table. + +@itemize @bullet +@findex CONFIGURE_POSIX_INIT_THREAD_TABLE +@item @code{CONFIGURE_POSIX_INIT_THREAD_TABLE} +is defined +if the user wishes to use a POSIX API Initialization +Threads Table. The application may choose to use the initialization +tasks or threads table from another API. By default, this +field is not defined as the user MUST select their own +API for initialization tasks. + +@findex CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE +@item @code{CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE} +is defined if the user wishes to define their own POSIX API Initialization +Threads Table. This table should be named @code{POSIX_Initialization_threads}. +By default, this is not defined. + +@findex CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT +@item @code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT} +is the entry point (a.k.a. function name) +of the single initialization thread defined by the +POSIX API Initialization Threads Table. By default +the value is @code{POSIX_Init}. + +@findex CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE +@item @code{CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE} +is the stack size of the single initialization thread defined by the +POSIX API Initialization Threads Table. By default +the value is @code{RTEMS_MINIMUM_STACK_SIZE * 2}. + +@end itemize + +@subsection ITRON API Configuration + +The parameters in this section are used to configure resources +for the RTEMS ITRON API. They are only relevant if the POSIX API +is enabled at configure time using the @code{--enable-itron} option. + +@itemize @bullet +@findex CONFIGURE_MAXIMUM_ITRON_TASKS +@item @code{CONFIGURE_MAXIMUM_ITRON_TASKS} +is the maximum number of +ITRON API tasks that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_SEMAPHORES +@item @code{CONFIGURE_MAXIMUM_ITRON_SEMAPHORES} +is the maximum number of +ITRON API semaphores that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS +@item @code{CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS} +is the maximum number of +ITRON API eventflags that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_MAILBOXES +@item @code{CONFIGURE_MAXIMUM_ITRON_MAILBOXES} +is the maximum number of +ITRON API mailboxes that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS +@item @code{CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS} +is the maximum number of +ITRON API message buffers that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_PORTS +@item @code{CONFIGURE_MAXIMUM_ITRON_PORTS} +is the maximum number of +ITRON API ports that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS +@item @code{CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS} +is the maximum number of +ITRON API memory pools that can be concurrently active. +The default is 0. + +@findex CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS +@item @code{CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS} +is the maximum number of +ITRON API fixed memory pools that can be concurrently active. +The default is 0. + +@end itemize + +@subsection ITRON Initialization Task Table Configuration + +The @code{confdefs.h} configuration system can automatically +generate an ITRON Initialization Tasks Table named +@code{ITRON_Initialization_tasks} with a single entry. The following +parameters control the generation of that table. + +@itemize @bullet +@findex CONFIGURE_ITRON_INIT_TASK_TABLE +@item @code{CONFIGURE_ITRON_INIT_TASK_TABLE} is defined +if the user wishes to use a ITRON API Initialization +Tasks Table. The application may choose to use the initialization +tasks or threads table from another API. By default, this +field is not defined as the user MUST select their own +API for initialization tasks. + +@findex CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE +@item @code{CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE} +is defined if the user wishes to define their own ITRON API Initialization +Tasks Table. This table should be named @code{ITRON_Initialization_tasks}. +By default, this is not defined. + +@findex CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT +@item @code{CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT} +is the entry point (a.k.a. function name) +of the single initialization task defined by the +ITRON API Initialization Tasks Table. By default +the value is @code{ITRON_Init}. + +@findex CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES +@item @code{CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES} +is the attribute set +of the single initialization task defined by the +ITRON API Initialization Tasks Table. By default +the value is @code{TA_HLNG}. + +@findex CONFIGURE_ITRON_INIT_TASK_PRIORITY +@item @code{CONFIGURE_ITRON_INIT_TASK_PRIORITY} +is the initial priority +of the single initialization task defined by the +ITRON API Initialization Tasks Table. By default +the value is @code{1} which is the highest priority +in the ITRON API. + +@findex CONFIGURE_ITRON_INIT_TASK_STACK_SIZE +@item @code{CONFIGURE_ITRON_INIT_TASK_STACK_SIZE} +is the stack size of the single initialization task defined by the +ITRON API Initialization Tasks Table. By default +the value is @code{RTEMS_MINIMUM_STACK_SIZE}. + +@end itemize + +@subsection Ada Tasks + +This section defines the system configuration parameters supported +by @code{confdefs.h} related to configuring RTEMS to support +a task using Ada tasking with GNAT. + +@itemize @bullet +@findex CONFIGURE_GNAT_RTEMS +@item @code{CONFIGURE_GNAT_RTEMS} is defined to inform +RTEMS that the GNAT Ada run-time is to be used by the +application. This configuration parameter is critical +as it makes @code{confdefs.h} configure the resources +(mutexes and keys) used implicitly by the GNAT run-time. +By default, this parameter is not defined. + +@findex CONFIGURE_MAXIMUM_ADA_TASKS +@item @code{CONFIGURE_MAXIMUM_ADA_TASKS} is the +number of Ada tasks that can be concurrently active +in the system. By default, when @code{CONFIGURE_GNAT_RTEMS} +is defined, this is set to 20. + +@findex CONFIGURE_MAXIMUM_FAKE_ADA_TASKS +@item @code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS} is +the number of "fake" Ada tasks that can be concurrently +active in the system. A "fake" Ada task is a non-Ada +task that makes calls back into Ada code and thus +implicitly uses the Ada run-time. + +@end itemize + +@section Configuration Table + +@cindex Configuration Table +@cindex RTEMS Configuration Table + +The RTEMS Configuration Table is used to tailor an +application for its specific needs. For example, the user can +configure the number of device drivers or which APIs may be used. +THe address of the user-defined Configuration Table is passed as an +argument to the @code{@value{DIRPREFIX}initialize_executive} +directive, which MUST be the first RTEMS directive called. +The RTEMS Configuration Table +is defined in the following @value{LANGUAGE} @value{STRUCTURE}: + +@ifset is-C +@findex rtems_configuration_table +@example +@group +typedef struct @{ + void *work_space_start; + rtems_unsigned32 work_space_size; + rtems_unsigned32 maximum_extensions; + rtems_unsigned32 microseconds_per_tick; + rtems_unsigned32 ticks_per_timeslice; + rtems_unsigned32 maximum_devices; + rtems_unsigned32 maximum_drivers; + rtems_unsigned32 number_of_device_drivers; + rtems_driver_address_table *Device_driver_table; + rtems_unsigned32 number_of_initial_extensions; + rtems_extensions_table *User_extension_table; + rtems_multiprocessing_table *User_multiprocessing_table; + rtems_api_configuration_table *RTEMS_api_configuration; + posix_api_configuration_table *POSIX_api_configuration; +@} rtems_configuration_table; +@end group +@end example +@end ifset + +@ifset is-Ada +@example +type Configuration_Table is + record + Work_Space_Start : RTEMS.Address; + Work_Space_Size : RTEMS.Unsigned32; + Maximum_Extensions : RTEMS.Unsigned32; + Microseconds_Per_Tick : RTEMS.Unsigned32; + Ticks_Per_Timeslice : RTEMS.Unsigned32; + Maximum_Devices : RTEMS.Unsigned32; + Number_Of_Device_Drivers : RTEMS.Unsigned32; + Device_Driver_Table : + RTEMS.Driver_Address_Table_Pointer; + Number_Of_Initial_Extensions : RTEMS.Unsigned32; + User_Extension_Table : RTEMS.Extensions_Table_Pointer; + User_Multiprocessing_Table : + RTEMS.Multiprocessing_Table_Pointer; + RTEMS_API_Configuration : + RTEMS.API_Configuration_Table_Pointer; + POSIX_API_Configuration : + RTEMS.POSIX_API_Configuration_Table_Pointer; + end record; + +type Configuration_Table_Pointer is access all Configuration_Table; +@end example +@end ifset + +@table @b +@item work_space_start +is the address of the RTEMS RAM Workspace. +This area contains items such as the +various object control blocks (TCBs, QCBs, ...) and task stacks. +If the address is not aligned on a four-word boundary, then +RTEMS will invoke the fatal error handler during +@code{@value{DIRPREFIX}initialize_executive}. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_EXECUTIVE_RAM_WORK_AREA} +which defaults to @code{NULL}. Normally, this field should be +configured as @code{NULL} as BSPs will assign memory for the +RTEMS RAM Workspace as part of system initialization. + +@item work_space_size +is the calculated size of the +RTEMS RAM Workspace. The section Sizing the RTEMS RAM Workspace +details how to arrive at this number. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_EXECUTIVE_RAM_SIZE} +and is calculated based on the other system configuration settings. + +@item microseconds_per_tick +is number of microseconds per clock tick. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MICROSECONDS_PER_TICK}. +If not defined by the application, then the +@code{CONFIGURE_MICROSECONDS_PER_TICK} macro defaults to 10000 +(10 milliseconds). + +@item ticks_per_timeslice +is the number of clock ticks for a timeslice. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_TICKS_PER_TIMESLICE}. + +@item maximum_devices +is the maximum number of devices that can be registered. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_DEVICES}. + +@item maximum_drivers +is the maximum number of device drivers that can be registered. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_DRIVERS}. +This value is set to @code{maximum_devices} if it is greater +than @code{maximum_drivers}. + +@item number_of_device_drivers +is the number of device drivers for the system. There should be +the same number of entries in the Device Driver Table. If this field +is zero, then the @code{User_driver_address_table} entry should be NULL. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field is calculated +automatically based on the number of entries in the +Device Driver Table. This calculation is based on the assumption +that the Device Driver Table is named @code{Device_drivers} +and defined in C. This table may be generated automatically +for simple applications using only the device drivers that correspond +to the following macros: + +@itemize @bullet + +@item @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} +@item @code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER} +@item @code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER} +@item @code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER} +@item @code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER} + +@end itemize + +Note that network device drivers are not configured in the +Device Driver Table. + +@item Device_driver_table +is the address of the Device Driver Table. This table contains the entry +points for each device driver. If the number_of_device_drivers field is zero, +then this entry should be NULL. The format of this table will be +discussed below. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the Device Driver Table is assumed to be +named @code{Device_drivers} and defined in C. If the application is providing +its own Device Driver Table, then the macro +@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} must be defined to indicate +this and prevent @code{confdefs.h} from generating the table. + +@item number_of_initial_extensions +is the number of initial user extensions. There should be +the same number of entries as in the User_extension_table. If this field +is zero, then the User_driver_address_table entry should be NULL. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS} +which is set automatically by @code{confdefs.h} based on the size +of the User Extensions Table. + +@item User_extension_table +is the address of the User +Extension Table. This table contains the entry points for the +static set of optional user extensions. If no user extensions +are configured, then this entry should be NULL. The format of +this table will be discussed below. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the User Extensions Table is named +@code{Configuration_Initial_Extensions} and defined in +confdefs.h. It is initialized based on the following +macros: + +@itemize @bullet + +@item @code{CONFIGURE_INITIAL_EXTENSIONS} +@item @code{STACK_CHECKER_EXTENSION} + +@end itemize + +The application may configure one or more initial user extension +sets by setting the @code{CONFIGURE_INITIAL_EXTENSIONS} macro. By +defining the @code{STACK_CHECKER_EXTENSION} macro, the task stack bounds +checking user extension set is automatically included in the +application. + +@item User_multiprocessing_table +is the address of the Multiprocessor Configuration Table. This +table contains information needed by RTEMS only when used in a multiprocessor +configuration. This field must be NULL when RTEMS is used in a +single processor configuration. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the Multiprocessor Configuration Table +is automatically generated when the @code{CONFIGURE_MP_APPLICATION} +is defined. If @code{CONFIGURE_MP_APPLICATION} is not defined, the this +entry is set to NULL. The generated table has the name +@code{Multiprocessing_configuration}. + +@item RTEMS_api_configuration +is the address of the RTEMS API Configuration Table. This table +contains information needed by the RTEMS API. This field should be +NULL if the RTEMS API is not used. [NOTE: Currently the RTEMS API +is required to support support components such as BSPs and libraries +which use this API.] This table is built automatically and this +entry filled in, if using the @code{confdefs.h} application +configuration mechanism. The generated table has the name +@code{Configuration_RTEMS_API}. + +@item POSIX_api_configuration +is the address of the POSIX API Configuration Table. This table +contains information needed by the POSIX API. This field should be +NULL if the POSIX API is not used. This table is built automatically +and this entry filled in, if using the @code{confdefs.h} application +configuration mechanism. The @code{confdefs.h} application +mechanism will fill this field in with the address of the +@code{Configuration_POSIX_API} table of POSIX API is configured +and NULL if the POSIX API is not configured. + +@end table + +@section RTEMS API Configuration Table + +@cindex RTEMS API Configuration Table + +The RTEMS API Configuration Table is used to configure the +managers which constitute the RTEMS API for a particular application. +For example, the user can configure the maximum number of tasks for +this application. The RTEMS API Configuration Table is defined in +the following @value{LANGUAGE} @value{STRUCTURE}: + +@ifset is-C +@findex rtems_api_configuration_table +@example +@group +typedef struct @{ + rtems_unsigned32 maximum_tasks; + rtems_unsigned32 maximum_timers; + rtems_unsigned32 maximum_semaphores; + rtems_unsigned32 maximum_message_queues; + rtems_unsigned32 maximum_partitions; + rtems_unsigned32 maximum_regions; + rtems_unsigned32 maximum_ports; + rtems_unsigned32 maximum_periods; + rtems_unsigned32 number_of_initialization_tasks; + rtems_initialization_tasks_table *User_initialization_tasks_table; +@} rtems_api_configuration_table; +@end group +@end example +@end ifset + +@ifset is-Ada +@example +type API_Configuration_Table is + record + Maximum_Tasks : RTEMS.Unsigned32; + Maximum_Timers : RTEMS.Unsigned32; + Maximum_Semaphores : RTEMS.Unsigned32; + Maximum_Message_queues : RTEMS.Unsigned32; + Maximum_Partitions : RTEMS.Unsigned32; + Maximum_Regions : RTEMS.Unsigned32; + Maximum_Ports : RTEMS.Unsigned32; + Maximum_Periods : RTEMS.Unsigned32; + Number_Of_Initialization_Tasks : RTEMS.Unsigned32; + User_Initialization_Tasks_Table : + RTEMS.Initialization_Tasks_Table_Pointer; + end record; + +type API_Configuration_Table_Pointer is + access all API_Configuration_Table; +@end example +@end ifset + +@table @b +@item maximum_tasks +is the maximum number of tasks that +can be concurrently active (created) in the system including +initialization tasks. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_TASKS}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_TASKS} +macro defaults to 10. + +@item maximum_timers +is the maximum number of timers +that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_TIMERS}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_TIMERS} +macro defaults to 0. + +@item maximum_semaphores +is the maximum number of +semaphores that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_SEMAPHORES}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_SEMAPHORES} +macro defaults to 0. + +@item maximum_message_queues +is the maximum number of +message queues that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES} macro defaults to 0. + +@item maximum_partitions +is the maximum number of +partitions that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_PARTITIONS}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_PARTITIONS} +macro defaults to 0. + +@item maximum_regions +is the maximum number of regions +that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_REGIONS}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_REGIONS} +macro defaults to 0. + +@item maximum_ports +is the maximum number of ports into +dual-port memory areas that can be concurrently active in the +system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_PORTS}. +If not defined by the application, then the @code{CONFIGURE_MAXIMUM_PORTS} +macro defaults to 0. + +@item number_of_initialization_tasks +is the number of initialization tasks configured. At least one +RTEMS initialization task or POSIX initializatin must be configured +in order for the user's application to begin executing. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the user must define the +@code{CONFIGURE_RTEMS_INIT_TASKS_TABLE} to indicate that there +is one or more RTEMS initialization task. If the application +only has one RTEMS initialization task, then the automatically +generated Initialization Task Table will be sufficient. The following +macros correspond to the single initialization task: + +@itemize @bullet + +@item @code{CONFIGURE_INIT_TASK_NAME} - is the name of the task. +If this macro is not defined by the application, then this defaults +to the task name of @code{"UI1 "} for User Initialization Task 1. + +@item @code{CONFIGURE_INIT_TASK_STACK_SIZE} - is the stack size +of the single initialization task. If this macro is not defined +by the application, then this defaults to @code{RTEMS_MINIMUM_STACK_SIZE}. + +@item @code{CONFIGURE_INIT_TASK_PRIORITY} - is the initial priority +of the single initialization task. If this macro is not defined +by the application, then this defaults to 1. + +@item @code{CONFIGURE_INIT_TASK_ATTRIBUTES} - is the attributes +of the single initialization task. If this macro is not defined +by the application, then this defaults to @code{RTEMS_DEFAULT_ATTRIBUTES}. + +@item @code{CONFIGURE_INIT_TASK_ENTRY_POINT} - is the entry point +of the single initialization task. If this macro is not defined +by the application, then this defaults to the C language routine +@code{Init}. + +@item @code{CONFIGURE_INIT_TASK_INITIAL_MODES} - is the initial execution +modes of the single initialization task. If this macro is not defined +by the application, then this defaults to @code{RTEMS_NO_PREEMPT}. + +@item @code{CONFIGURE_INIT_TASK_ARGUMENTS} - is the argument passed to the +of the single initialization task. If this macro is not defined +by the application, then this defaults to 0. + + +@end itemize + + +has the option to have + value for this field corresponds +to the setting of the macro @code{}. + +@item User_initialization_tasks_table +is the address of the Initialization Task Table. This table contains the +information needed to create and start each of the +initialization tasks. The format of this table will be discussed below. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_EXECUTIVE_RAM_WORK_AREA}. + +@end table + +@section POSIX API Configuration Table + +@cindex POSIX API Configuration Table + +The POSIX API Configuration Table is used to configure the +managers which constitute the POSIX API for a particular application. +For example, the user can configure the maximum number of threads for +this application. The POSIX API Configuration Table is defined in +the following @value{LANGUAGE} @value{STRUCTURE}: + +@ifset is-C +@findex posix_initialization_threads_table +@findex posix_api_configuration_table +@example +@group +typedef struct @{ + void *(*thread_entry)(void *); +@} posix_initialization_threads_table; + +typedef struct @{ + int maximum_threads; + int maximum_mutexes; + int maximum_condition_variables; + int maximum_keys; + int maximum_timers; + int maximum_queued_signals; + int number_of_initialization_tasks; + posix_initialization_threads_table *User_initialization_tasks_table; +@} posix_api_configuration_table; +@end group +@end example +@end ifset + +@ifset is-Ada +@example + type POSIX_Thread_Entry is access procedure ( + Argument : in RTEMS.Address + ); + + type POSIX_Initialization_Threads_Table_Entry is + record + Thread_Entry : RTEMS.POSIX_Thread_Entry; + end record; + + type POSIX_Initialization_Threads_Table is array + ( RTEMS.Unsigned32 range <> ) of + RTEMS.POSIX_Initialization_Threads_Table_Entry; + + type POSIX_Initialization_Threads_Table_Pointer is access all + POSIX_Initialization_Threads_Table; + + type POSIX_API_Configuration_Table_Entry is + record + Maximum_Threads : Interfaces.C.Int; + Maximum_Mutexes : Interfaces.C.Int; + Maximum_Condition_Variables : Interfaces.C.Int; + Maximum_Keys : Interfaces.C.Int; + Maximum_Timers : Interfaces.C.Int; + Maximum_Queued_Signals : Interfaces.C.Int; + Number_Of_Initialization_Tasks : Interfaces.C.Int; + User_Initialization_Tasks_Table : + RTEMS.POSIX_Initialization_Threads_Table_Pointer; + end record; + + type POSIX_API_Configuration_Table is array + ( RTEMS.Unsigned32 range <> ) of + RTEMS.POSIX_API_Configuration_Table_Entry; + + type POSIX_API_Configuration_Table_Pointer is access all + RTEMS.POSIX_API_Configuration_Table; +@end example +@end ifset + +@table @b +@item maximum_threads +is the maximum number of threads that +can be concurrently active (created) in the system including +initialization threads. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_THREADS}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_THREADS} macro defaults to 10. + +@item maximum_mutexes +is the maximum number of mutexes that can be concurrently +active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_MUTEXES}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_MUTEXES} macro defaults to 0. + +@item maximum_condition_variables +is the maximum number of condition variables that can be +concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES} macro defaults to 0. + +@item maximum_keys +is the maximum number of keys that can be concurrently active in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_KEYS}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_KEYS} macro defaults to 0. + +@item maximum_timers +is the maximum number of POSIX timers that can be concurrently active +in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_TIMERS}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_TIMERS} macro defaults to 0. + +@item maximum_queued_signals +is the maximum number of queued signals that can be concurrently +pending in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS}. +If not defined by the application, then the +@code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS} macro defaults to 0. + +@item number_of_initialization_threads +is the number of initialization threads configured. At least one +initialization threads must be configured. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the user must define the +@code{CONFIGURE_POSIX_INIT_THREAD_TABLE} to indicate that there +is one or more POSIX initialization thread. If the application +only has one POSIX initialization thread, then the automatically +generated POSIX Initialization Thread Table will be sufficient. The following +macros correspond to the single initialization task: + +@itemize @bullet + +@item @code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT} - is the entry +point of the thread. If this macro is not defined by the application, +then this defaults to the C routine @code{POSIX_Init}. + +@item @code{CONFIGURE_POSIX_INIT_TASK_STACK_SIZE} - is the stack size +of the single initialization thread. If this macro is not defined +by the application, then this defaults to +@code{(RTEMS_MINIMUM_STACK_SIZE * 2)}. + +@end itemize + +@item User_initialization_threads_table +is the address of the Initialization Threads Table. This table contains the +information needed to create and start each of the initialization threads. +The format of each entry in this table is defined in the +@code{posix_initialization_threads_table} @value{STRUCTURE}. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the address of the @code{POSIX_Initialization_threads} structure. + +@end table + +@section CPU Dependent Information Table + +@cindex CPU Dependent Information Table + +The CPU Dependent Information Table is used to +describe processor dependent information required by RTEMS. +This table is generally used to supply RTEMS with information +only known by the Board Support Package. The contents of this +table are discussed in the CPU Dependent Information Table +chapter of the Applications Supplement document for a specific +target processor. + +The @code{confdefs.h} mechanism does not support generating this +table. It is normally filled in by the Board Support Package. + +@section Initialization Task Table + +@cindex Initialization Tasks Table + +The Initialization Task Table is used to describe +each of the user initialization tasks to the Initialization +Manager. The table contains one entry for each initialization +task the user wishes to create and start. The fields of this +data structure directly correspond to arguments to the +@code{@value{DIRPREFIX}task_create} and +@code{@value{DIRPREFIX}task_start} directives. The number of entries is +found in the @code{number_of_initialization_tasks} entry in the +Configuration Table. + +The format of each entry in the +Initialization Task Table is defined in the following @value{LANGUAGE} +@value{STRUCTURE}: + +@ifset is-C +@findex rtems_initialization_tasks_table +@example +typedef struct @{ + rtems_name name; + rtems_unsigned32 stack_size; + rtems_task_priority initial_priority; + rtems_attribute attribute_set; + rtems_task_entry entry_point; + rtems_mode mode_set; + rtems_task_argument argument; +@} rtems_initialization_tasks_table; +@end example +@end ifset + +@ifset is-Ada +@example +type Initialization_Tasks_Table_Entry is + record + Name : RTEMS.Name; -- task name + Stack_Size : RTEMS.Unsigned32; -- task stack size + Initial_Priority : RTEMS.Task_priority; -- task priority + Attribute_Set : RTEMS.Attribute; -- task attributes + Entry_Point : RTEMS.Task_Entry; -- task entry point + Mode_Set : RTEMS.Mode; -- task initial mode + Argument : RTEMS.Unsigned32; -- task argument + end record; + +type Initialization_Tasks_Table is array + ( RTEMS.Unsigned32 range <> ) of + RTEMS.Initialization_Tasks_Table_Entry; + +type Initialization_Tasks_Table_Pointer is access all + Initialization_Tasks_Table; +@end example +@end ifset + +@table @b +@item name +is the name of this initialization task. + +@item stack_size +is the size of the stack for this initialization task. + +@item initial_priority +is the priority of this initialization task. + +@item attribute_set +is the attribute set used during creation of this initialization task. + +@item entry_point +is the address of the entry point of this initialization task. + +@item mode_set +is the initial execution mode of this initialization task. + +@item argument +is the initial argument for this initialization task. + +@end table + +A typical declaration for an Initialization Task Table might appear as follows: + +@ifset is-C +@example +rtems_initialization_tasks_table +Initialization_tasks[2] = @{ + @{ INIT_1_NAME, + 1024, + 1, + DEFAULT_ATTRIBUTES, + Init_1, + DEFAULT_MODES, + 1 + + @}, + @{ INIT_2_NAME, + 1024, + 250, + FLOATING_POINT, + Init_2, + NO_PREEMPT, + 2 + + @} +@}; +@end example +@end ifset + +@ifset is-Ada +@example +Initialization_Tasks : aliased + RTEMS.Initialization_Tasks_Table( 1 .. 2 ) := ( + (INIT_1_NAME, + 1024, + 1, + RTEMS.Default_Attributes, + Init_1'Access, + RTEMS.Default_Modes, + 1), + (INIT_2_NAME, + 1024, + 250, + RTEMS.Floating_Point, + Init_2'Access, + RTEMS.No_Preempt, + 2) +); +@end example +@end ifset + +@section Driver Address Table + +@cindex Device Driver Table + +The Device Driver Table is used to inform the I/O Manager of the set of +entry points for each device driver configured in the system. The table +contains one entry for each device driver required by the application. +The number of entries is defined in the number_of_device_drivers entry +in the Configuration Table. This table is copied to the Device Drive +Table during the IO Manager's initialization giving the entries in this +table the lower major numbers. The format of each entry in the Device +Driver Table is defined in the following @value{LANGUAGE} +@value{STRUCTURE}: + +@ifset is-C +@findex rtems_driver_address_table +@example +typedef struct @{ + rtems_device_driver_entry initialization; + rtems_device_driver_entry open; + rtems_device_driver_entry close; + rtems_device_driver_entry read; + rtems_device_driver_entry write; + rtems_device_driver_entry control; +@} rtems_driver_address_table; +@end example +@end ifset + +@ifset is-Ada +@example +type Driver_Address_Table_Entry is + record + Initialization : RTEMS.Device_Driver_Entry; + Open : RTEMS.Device_Driver_Entry; + Close : RTEMS.Device_Driver_Entry; + Read : RTEMS.Device_Driver_Entry; + Write : RTEMS.Device_Driver_Entry; + Control : RTEMS.Device_Driver_Entry; + end record; + +type Driver_Address_Table is array ( RTEMS.Unsigned32 range <> ) of + RTEMS.Driver_Address_Table_Entry; + +type Driver_Address_Table_Pointer is access all Driver_Address_Table; +@end example +@end ifset + +@table @b +@item initialization +is the address of the entry point called by +@code{@value{DIRPREFIX}io_initialize} +to initialize a device driver and its associated devices. + +@item open +is the address of the entry point called by @code{@value{DIRPREFIX}io_open}. + +@item close +is the address of the entry point called by @code{@value{DIRPREFIX}io_close}. + +@item read +is the address of the entry point called by @code{@value{DIRPREFIX}io_read}. + +@item write +is the address of the entry point called by @code{@value{DIRPREFIX}io_write}. + +@item control +is the address of the entry point called by @code{@value{DIRPREFIX}io_control}. + +@end table + +Driver entry points configured as NULL will always +return a status code of @code{@value{RPREFIX}SUCCESSFUL}. No user code will be +executed in this situation. + +A typical declaration for a Device Driver Table might appear as follows: + +@ifset is-C +@example +rtems_driver_address_table Driver_table[2] = @{ + @{ tty_initialize, tty_open, tty_close, /* major = 0 */ + tty_read, tty_write, tty_control + @}, + @{ lp_initialize, lp_open, lp_close, /* major = 1 */ + NULL, lp_write, lp_control + @} +@}; +@end example +@end ifset + +@ifset is-Ada +@example +@end example +@end ifset + +More information regarding the construction and +operation of device drivers is provided in the I/O Manager +chapter. + +@section User Extensions Table + +@cindex User Extensions Table + +The User Extensions Table is used to inform RTEMS of +the optional user-supplied static extension set. This table +contains one entry for each possible extension. The entries are +called at critical times in the life of the system and +individual tasks. The application may create dynamic extensions +in addition to this single static set. The format of each entry +in the User Extensions Table is defined in the following @value{LANGUAGE} +@value{STRUCTURE}: + +@ifset is-C +@example +typedef User_extensions_routine rtems_extension; +typedef User_extensions_thread_create_extension + rtems_task_create_extension; +typedef User_extensions_thread_delete_extension + rtems_task_delete_extension; +typedef User_extensions_thread_start_extension + rtems_task_start_extension; +typedef User_extensions_thread_restart_extension + rtems_task_restart_extension; +typedef User_extensions_thread_switch_extension + rtems_task_switch_extension; +typedef User_extensions_thread_begin_extension + rtems_task_begin_extension; +typedef User_extensions_thread_exitted_extension + rtems_task_exitted_extension; +typedef User_extensions_fatal_extension rtems_fatal_extension; + +typedef User_extensions_Table rtems_extensions_table; + +typedef struct @{ + rtems_task_create_extension thread_create; + rtems_task_start_extension thread_start; + rtems_task_restart_extension thread_restart; + rtems_task_delete_extension thread_delete; + rtems_task_switch_extension thread_switch; + rtems_task_begin_extension thread_begin; + rtems_task_exitted_extension thread_exitted; + rtems_fatal_extension fatal; +@} User_extensions_Table; +@end example +@end ifset + +@ifset is-Ada +@example +type Extensions_Table_Entry is + record + Thread_Create : RTEMS.Thread_Create_Extension; + Thread_Start : RTEMS.Thread_Start_Extension; + Thread_Restart : RTEMS.Thread_Restart_Extension; + Thread_Delete : RTEMS.Thread_Delete_Extension; + Thread_Switch : RTEMS.Thread_Switch_Extension; + Thread_Post_Switch : RTEMS.Thread_Post_Switch_Extension; + Thread_Begin : RTEMS.Thread_Begin_Extension; + Thread_Exitted : RTEMS.Thread_Exitted_Extension; + Fatal : RTEMS.Fatal_Error_Extension; + end record; +@end example +@end ifset + +@table @b + +@item thread_create +is the address of the +user-supplied subroutine for the TASK_CREATE extension. If this +extension for task creation is defined, it is called from the +task_create directive. A value of NULL indicates that no +extension is provided. + +@item thread_start +is the address of the user-supplied +subroutine for the TASK_START extension. If this extension for +task initiation is defined, it is called from the task_start +directive. A value of NULL indicates that no extension is +provided. + +@item thread_restart +is the address of the user-supplied +subroutine for the TASK_RESTART extension. If this extension +for task re-initiation is defined, it is called from the +task_restart directive. A value of NULL indicates that no +extension is provided. + +@item thread_delete +is the address of the user-supplied +subroutine for the TASK_DELETE extension. If this RTEMS +extension for task deletion is defined, it is called from the +task_delete directive. A value of NULL indicates that no +extension is provided. + +@item thread_switch +is the address of the user-supplied +subroutine for the task context switch extension. This +subroutine is called from RTEMS dispatcher after the current +task has been swapped out but before the new task has been +swapped in. A value of NULL indicates that no extension is +provided. As this routine is invoked after saving the current +task's context and before restoring the heir task's context, it +is not necessary for this routine to save and restore any +registers. + +@item thread_begin +is the address of the user-supplied +subroutine which is invoked immediately before a task begins +execution. It is invoked in the context of the beginning task. +A value of NULL indicates that no extension is provided. + +@item thread_exitted +is the address of the user-supplied +subroutine which is invoked when a task exits. This procedure +is responsible for some action which will allow the system to +continue execution (i.e. delete or restart the task) or to +terminate with a fatal error. If this field is set to NULL, the +default RTEMS TASK_EXITTED handler will be invoked. + +@item fatal +is the address of the user-supplied +subroutine for the FATAL extension. This RTEMS extension of +fatal error handling is called from the +@code{@value{DIRPREFIX}fatal_error_occurred} +directive. If the user's fatal error handler returns or if this +entry is NULL then the default RTEMS fatal error handler will be +executed. + +@end table + +A typical declaration for a User Extension Table +which defines the TASK_CREATE, TASK_DELETE, TASK_SWITCH, and +FATAL extension might appear as follows: + +@ifset is-C +@example +rtems_extensions_table User_extensions = @{ + task_create_extension, + NULL, + NULL, + task_delete_extension, + task_switch_extension, + NULL, + NULL, + fatal_extension +@}; +@end example +@end ifset + +@ifset is-Ada +User_Extensions : RTEMS.Extensions_Table := ( + Task_Create_Extension'Access, + null, + null, + Task_Delete_Extension'Access, + Task_Switch_Extension'Access, + null, + null, + Fatal_Extension'Access +); +@example + +@end example +@end ifset + +More information regarding the user extensions is +provided in the User Extensions chapter. + +@section Multiprocessor Configuration Table + +@cindex Multiprocessor Configuration Table + +The Multiprocessor Configuration Table contains +information needed when using RTEMS in a multiprocessor +configuration. Many of the details associated with configuring +a multiprocessor system are dependent on the multiprocessor +communications layer provided by the user. The address of the +Multiprocessor Configuration Table should be placed in the +@code{User_multiprocessing_table} entry in the primary Configuration +Table. Further details regarding many of the entries in the +Multiprocessor Configuration Table will be provided in the +Multiprocessing chapter. + + +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the macro @code{CONFIGURE_MP_APPLICATION} must +be defined to automatically generate the Multiprocessor Configuration Table. +If @code{CONFIGURE_MP_APPLICATION}, is not defined, then a NULL pointer +is configured as the address of this table. + +The format of the Multiprocessor Configuration Table is defined in +the following @value{LANGUAGE} @value{STRUCTURE}: + +@ifset is-C +@example +typedef struct @{ + rtems_unsigned32 node; + rtems_unsigned32 maximum_nodes; + rtems_unsigned32 maximum_global_objects; + rtems_unsigned32 maximum_proxies; + rtems_mpci_table *User_mpci_table; +@} rtems_multiprocessing_table; +@end example +@end ifset + +@ifset is-Ada +@example +type Multiprocessing_Table is + record + Node : RTEMS.Unsigned32; + Maximum_Nodes : RTEMS.Unsigned32; + Maximum_Global_Objects : RTEMS.Unsigned32; + Maximum_Proxies : RTEMS.Unsigned32; + User_MPCI_Table : RTEMS.MPCI_Table_Pointer; + end record; + +type Multiprocessing_Table_Pointer is access all Multiprocessing_Table; +@end example +@end ifset + +@table @b +@item node +is a unique processor identifier +and is used in routing messages between nodes in a +multiprocessor configuration. Each processor must have a unique +node number. RTEMS assumes that node numbers start at one and +increase sequentially. This assumption can be used to advantage +by the user-supplied MPCI layer. Typically, this requirement is +made when the node numbers are used to calculate the address of +inter-processor communication links. Zero should be avoided as +a node number because some MPCI layers use node zero to +represent broadcasted packets. Thus, it is recommended that +node numbers start at one and increase sequentially. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MP_NODE_NUMBER}. +If not defined by the application, then the @code{CONFIGURE_MP_NODE_NUMBER} +macro defaults to the value of the @code{NODE_NUMBER} macro which is +set on the compiler command line by the RTEMS Multiprocessing Test Suites. + + +@item maximum_nodes +is the number of processor nodes in the system. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MP_MAXIMUM_NODES}. +If not defined by the application, then the @code{CONFIGURE_MP_MAXIMUM_NODES} +macro defaults to the value 2. + +@item maximum_global_objects +is the maximum number of global objects which can exist at any +given moment in the entire system. If this parameter is not the +same on all nodes in the system, then a fatal error is generated +to inform the user that the system is inconsistent. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS}. +If not defined by the application, then the +@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS} macro defaults to the value 32. + + +@item maximum_proxies +is the maximum number of proxies which can exist at any given moment +on this particular node. A proxy is a substitute task control block +which represent a task residing on a remote node when that task blocks +on a remote object. Proxies are used in situations in which delayed +interaction is required with a remote node. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MP_MAXIMUM_PROXIES}. +If not defined by the application, then the @code{CONFIGURE_MP_MAXIMUM_PROXIES} +macro defaults to the value 32. + + +@item User_mpci_table +is the address of the Multiprocessor Communications Interface +Table. This table contains the entry points of user-provided functions +which constitute the multiprocessor communications layer. This table +must be provided in multiprocessor configurations with all +entries configured. The format of this table and details +regarding its entries can be found in the next section. +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the value for this field corresponds +to the setting of the macro @code{CONFIGURE_MP_MPCI_TABLE_POINTER}. +If not defined by the application, then the +@code{CONFIGURE_MP_MPCI_TABLE_POINTER} macro defaults to the +address of the table named @code{MPCI_table}. + + +@end table + +@section Multiprocessor Communications Interface Table + +@cindex Multiprocessor Communications Interface Table + +This table defines the set of callouts that must be provided by +an Multiprocessor Communications Interface implementation. + +When using the @code{confdefs.h} mechanism for configuring +an RTEMS application, the name of this table is assumed +to be @code{MPCI_table} unless the application sets +the @code{CONFIGURE_MP_MPCI_TABLE_POINTER} when configuring a +multiprocessing system. + +The format of this table is defined in +the following @value{LANGUAGE} @value{STRUCTURE}: + +@ifset is-C +@example +typedef struct @{ + rtems_unsigned32 default_timeout; /* in ticks */ + rtems_unsigned32 maximum_packet_size; + rtems_mpci_initialization_entry initialization; + rtems_mpci_get_packet_entry get_packet; + rtems_mpci_return_packet_entry return_packet; + rtems_mpci_send_entry send; + rtems_mpci_receive_entry receive; +@} rtems_mpci_table; +@end example +@end ifset + +@ifset is-Ada +@example +type MPCI_Table is + record + Default_Timeout : RTEMS.Unsigned32; -- in ticks + Maximum_Packet_Size : RTEMS.Unsigned32; + Initialization : RTEMS.MPCI_Initialization_Entry; + Get_Packet : RTEMS.MPCI_Get_Packet_Entry; + Return_Packet : RTEMS.MPCI_Return_Packet_Entry; + Send : RTEMS.MPCI_Send_Entry; + Receive : RTEMS.MPCI_Receive_Entry; + end record; + +type MPCI_Table_Pointer is access all MPCI_Table; +@end example +@end ifset + +@table @b +@item default_timeout +is the default maximum length of time a task should block waiting for +a response to a directive which results in communication with a remote node. +The maximum length of time is a function the user supplied +multiprocessor communications layer and the media used. This +timeout only applies to directives which would not block if the +operation were performed locally. + +@item maximum_packet_size +is the size in bytes of the longest packet which the MPCI layer is capable +of sending. This value should represent the total number of bytes available +for a RTEMS interprocessor messages. + +@item initialization +is the address of the entry point for the initialization procedure of the +user supplied multiprocessor communications layer. + +@item get_packet +is the address of the entry point for the procedure called by RTEMS to +obtain a packet from the user supplied multiprocessor communications layer. + +@item return_packet +is the address of the entry point for the procedure called by RTEMS to +return a packet to the user supplied multiprocessor communications layer. + +@item send +is the address of the entry point for the procedure called by RTEMS to +send an envelope to another node. This procedure is part of the user +supplied multiprocessor communications layer. + +@item receive +is the address of the entry point for the +procedure called by RTEMS to retrieve an envelope containing a +message from another node. This procedure is part of the user +supplied multiprocessor communications layer. + +@end table + +More information regarding the required functionality of these +entry points is provided in the Multiprocessor chapter. + +@section Determining Memory Requirements + +Since memory is a critical resource in many real-time +embedded systems, the RTEMS Classic API was specifically designed to allow +unused managers to be forcibly excluded from the run-time environment. +This allows the application designer the flexibility to tailor +RTEMS to most efficiently meet system requirements while still +satisfying even the most stringent memory constraints. As +result, the size of the RTEMS executive is application +dependent. A Memory Requirements worksheet is provided in the +Applications Supplement document for a specific target +processor. This worksheet can be used to calculate the memory +requirements of a custom RTEMS run-time environment. To insure +that enough memory is allocated for future versions of RTEMS, +the application designer should round these memory requirements +up. The following Classic API managers may be optionally excluded: + +@itemize @bullet +@item signal +@item region +@item dual ported memory +@item event +@item multiprocessing +@item partition +@item timer +@item semaphore +@item message +@item rate monotonic +@end itemize + +RTEMS is designed to be built and installed as a library +that is linked into the application. As such, much of +RTEMS is implemented in such a way that there is a single +entry point per source file. This avoids having the +linker being forced to pull large object files in their +entirety into an application when the application references +a single symbol. + +RTEMS based applications must somehow provide memory +for RTEMS' code and data space. Although RTEMS' data space must +be in RAM, its code space can be located in either ROM or RAM. +In addition, the user must allocate RAM for the RTEMS RAM +Workspace. The size of this area is application dependent and +can be calculated using the formula provided in the Memory +Requirements chapter of the Applications Supplement document +for a specific target processor. + +All private RTEMS data variables and routine names used by +RTEMS begin with the underscore ( _ ) character followed by an +upper-case letter. If RTEMS is linked with an application, then +the application code should NOT contain any symbols which begin +with the underscore character and followed by an upper-case +letter to avoid any naming conflicts. All RTEMS directive names +should be treated as reserved words. + +@section Sizing the RTEMS RAM Workspace + +The RTEMS RAM Workspace is a user-specified block of +memory reserved for use by RTEMS. The application should NOT +modify this memory. This area consists primarily of the RTEMS +data structures whose exact size depends upon the values +specified in the Configuration Table. In addition, task stacks +and floating point context areas are dynamically allocated from +the RTEMS RAM Workspace. + +The @code{confdefs.h} mechanism calcalutes the size +of the RTEMS RAM Workspace automatically. It assumes that +all tasks are floating point and that all will be allocated +the miminum stack space. This calculation also automatically +includes the memory that will be allocated for internal use +by RTEMS. The following macros may be set +by the application to make the calculation +of memory required more accurate: + +@itemize @bullet + +@item @code{CONFIGURE_MEMORY_OVERHEAD} +@item @code{CONFIGURE_EXTRA_TASK_STACKS} + +@end itemize + +The starting address of the RTEMS RAM Workspace must +be aligned on a four-byte boundary. Failure to properly align +the workspace area will result in the +@code{@value{DIRPREFIX}fatal_error_occurred} +directive being invoked with the +@code{@value{RPREFIX}INVALID_ADDRESS} error code. + +A worksheet is provided in the @b{Memory Requirements} +chapter of the Applications Supplement document for a specific +target processor to assist the user in calculating the minimum +size of the RTEMS RAM Workspace for each application. The value +calculated with this worksheet is the minimum value that should +be specified as the @code{work_space_size} parameter of the +Configuration Table. + +The allocation of objects can operate in two modes. The default mode +has an object number ceiling. No more than the specified number of +objects can be allocated from the RTEMS RAM Workspace. The number of objects +specified in the particular API Configuration table fields are +allocated at initialisation. The second mode allows the number of +objects to grow to use the available free memory in the RTEMS RAM Workspace. + +The auto-extending mode can be enabled individually for each object +type by using the macro @code{rtems_resource_unlimited}. This takes a value +as a parameter, and is used to set the object maximum number field in +an API Configuration table. The value is an allocation unit size. When +RTEMS is required to grow the object table it is grown by this +size. The kernel will return the object memory back to the RTEMS RAM Workspace +when an object is destroyed. The kernel will only return an allocated +block of objects to the RTEMS RAM Workspace if at least half the allocation +size of free objects remain allocated. RTEMS always keeps one +allocation block of objects allocated. Here is an example of using +@code{rtems_resource_unlimited}: + +@example +#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5) +@end example + +The user is cautioned that future versions of RTEMS may not have the +same memory requirements per object. Although the value calculated is +suficient for a particular target processor and release of RTEMS, +memory usage is subject to change across versions and target +processors. The user is advised to allocate somewhat more memory than +the worksheet recommends to insure compatibility with future releases +for a specific target processor and other target processors. To avoid +problems, the user should recalculate the memory requirements each +time one of the following events occurs: + +@itemize @bullet +@item a configuration parameter is modified, +@item task or interrupt stack requirements change, +@item task floating point attribute is altered, +@item RTEMS is upgraded, or +@item the target processor is changed. +@end itemize + +Failure to provide enough space in the RTEMS RAM +Workspace will result in the +@code{@value{DIRPREFIX}fatal_error_occurred} directive +being invoked with the appropriate error code. diff --git a/doc/user/datatypes.t b/doc/user/datatypes.t new file mode 100644 index 0000000000..d842786676 --- /dev/null +++ b/doc/user/datatypes.t @@ -0,0 +1,311 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter RTEMS Data Types + +@section Introduction + +This chapter contains a complete list of the RTEMS primitive +data types in alphabetical order. This is intended to be +an overview and the user is encouraged to look at the appropriate +chapters in the manual for more information about the +usage of the various data types. + +@section List of Data Types + +The following is a complete list of the RTEMS primitive +data types in alphabetical order: + +@itemize @bullet + +@findex rtems_address +@item @code{@value{DIRPREFIX}address} is the data type used to manage +addresses. It is equivalent to +@ifset is-C +a "void *" pointer. +@end ifset +@ifset is-Ada +the System.Address data type. +@end ifset + +@findex rtems_asr +@item @code{@value{DIRPREFIX}asr} is the return type for an +RTEMS ASR. + +@findex rtems_asr_entry +@item @code{@value{DIRPREFIX}asr_entry} is the address of +the entry point to an RTEMS ASR. + +@findex rtems_attribute +@item @code{@value{DIRPREFIX}attribute} is the data type used +to manage the attributes for RTEMS objects. It is primarily +used as an argument to object create routines to specify +characteristics of the new object. + +@findex rtems_boolean +@item @code{@value{DIRPREFIX}boolean} may only take on the +values of @code{TRUE} and @code{FALSE}. + +@findex rtems_context +@item @code{@value{DIRPREFIX}context} is the CPU dependent +data structure used to manage the integer and system +register portion of each task's context. + +@findex rtems_context_fp +@item @code{@value{DIRPREFIX}context_fp} is the CPU dependent +data structure used to manage the floating point portion of +each task's context. + +@findex rtems_device_driver +@item @code{@value{DIRPREFIX}device_driver} is the +return type for a RTEMS device driver routine. + +@findex rtems_device_driver_entry +@item @code{@value{DIRPREFIX}device_driver_entry} is the +entry point to a RTEMS device driver routine. + +@findex rtems_device_major_number +@item @code{@value{DIRPREFIX}device_major_number} is the +data type used to manage device major numbers. + +@findex rtems_device_minor_number +@item @code{@value{DIRPREFIX}device_minor_number} is the +data type used to manage device minor numbers. + +@findex rtems_double +@item @code{@value{DIRPREFIX}double} is the RTEMS data +type that corresponds to double precision floating point +on the target hardware. + +@findex rtems_event_set +@item @code{@value{DIRPREFIX}event_set} is the data +type used to manage and manipulate RTEMS event sets +with the Event Manager. + +@findex rtems_extension +@item @code{@value{DIRPREFIX}extension} is the return type +for RTEMS user extension routines. + +@findex rtems_fatal_extension +@item @code{@value{DIRPREFIX}fatal_extension} is the +entry point for a fatal error user extension handler routine. + +@findex rtems_id +@item @code{@value{DIRPREFIX}id} is the data type used +to manage and manipulate RTEMS object IDs. + +@findex rtems_interrupt_frame +@item @code{@value{DIRPREFIX}interrupt_frame} is the +data structure that defines the format of the interrupt +stack frame as it appears to a user ISR. This data +structure may not be defined on all ports. + +@findex rtems_interrupt_level +@item @code{@value{DIRPREFIX}interrupt_level} is the +data structure used with the @code{@value{DIRPREFIX}interrupt_disable}, +@code{@value{DIRPREFIX}interrupt_enable}, and +@code{@value{DIRPREFIX}interrupt_flash} routines. This +data type is CPU dependent and usually corresponds to +the contents of the processor register containing +the interrupt mask level. + +@findex rtems_interval +@item @code{@value{DIRPREFIX}interval} is the data +type used to manage and manipulate time intervals. +Intervals are non-negative integers used to measure +the length of time in clock ticks. + +@findex rtems_isr +@item @code{@value{DIRPREFIX}isr} is the return type +of a function implementing an RTEMS ISR. + +@findex rtems_isr_entry +@item @code{@value{DIRPREFIX}isr_entry} is the address of +the entry point to an RTEMS ISR. It is equivalent to the +entry point of the function implementing the ISR. + +@findex rtems_mp_packet_classes +@item @code{@value{DIRPREFIX}mp_packet_classes} is the +enumerated type which specifies the categories of +multiprocessing messages. For example, one of the +classes is for messages that must be processed by +the Task Manager. + +@findex rtems_mode +@item @code{@value{DIRPREFIX}mode} is the data type +used to manage and dynamically manipulate the execution +mode of an RTEMS task. + +@findex rtems_mpci_entry +@item @code{@value{DIRPREFIX}mpci_entry} is the return type +of an RTEMS MPCI routine. + +@findex rtems_mpci_get_packet_entry +@item @code{@value{DIRPREFIX}mpci_get_packet_entry} is the address of +the entry point to the get packet routine for an MPCI implementation. + +@findex rtems_mpci_initialization_entry +@item @code{@value{DIRPREFIX}mpci_initialization_entry} is the address of +the entry point to the initialization routine for an MPCI implementation. + +@findex rtems_mpci_receive_packet_entry +@item @code{@value{DIRPREFIX}mpci_receive_packet_entry} is the address of +the entry point to the receive packet routine for an MPCI implementation. + +@findex rtems_mpci_return_packet_entry +@item @code{@value{DIRPREFIX}mpci_return_packet_entry} is the address of +the entry point to the return packet routine for an MPCI implementation. + +@findex rtems_mpci_send_packet_entry +@item @code{@value{DIRPREFIX}mpci_send_packet_entry} is the address of +the entry point to the send packet routine for an MPCI implementation. + +@findex rtems_mpci_table +@item @code{@value{DIRPREFIX}mpci_table} is the data structure +containing the configuration information for an MPCI. + +@findex rtems_option +@item @code{@value{DIRPREFIX}option} is the data type +used to specify which behavioral options the caller desires. +It is commonly used with potentially blocking directives to specify +whether the caller is willing to block or return immediately with an error +indicating that the resource was not available. + +@findex rtems_packet_prefix +@item @code{@value{DIRPREFIX}packet_prefix} is the data structure +that defines the first bytes in every packet sent between nodes +in an RTEMS multiprocessor system. It contains routing information +that is expected to be used by the MPCI layer. + +@findex rtems_signal_set +@item @code{@value{DIRPREFIX}signal_set} is the data +type used to manage and manipulate RTEMS signal sets +with the Signal Manager. + +@findex rtems_signed8 +@item @code{@value{DIRPREFIX}signed8} is the data +type that corresponds to signed eight bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_signed16 +@item @code{@value{DIRPREFIX}signed16} is the data +type that corresponds to signed sixteen bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_signed32 +@item @code{@value{DIRPREFIX}signed32} is the data +type that corresponds to signed thirty-two bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_signed64 +@item @code{@value{DIRPREFIX}signed64} is the data +type that corresponds to signed sixty-four bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_single +@item @code{@value{DIRPREFIX}single} is the RTEMS data +type that corresponds to single precision floating point +on the target hardware. + +@findex rtems_status_codes +@item @code{@value{DIRPREFIX}status_codes} is the +@findex rtems_task +@item @code{@value{DIRPREFIX}task} is the return type for an +RTEMS Task. + +@findex rtems_task_argument +@item @code{@value{DIRPREFIX}task_argument} is the data +type for the argument passed to each RTEMS task. + +@findex rtems_task_begin_extension +@item @code{@value{DIRPREFIX}task_begin_extension} is the +entry point for a task beginning execution user extension handler routine. + +@findex rtems_task_create_extension +@item @code{@value{DIRPREFIX}task_create_extension} is the +entry point for a task creation execution user extension handler routine. + +@findex rtems_task_delete_extension +@item @code{@value{DIRPREFIX}task_delete_extension} is the +entry point for a task deletion user extension handler routine. + +@findex rtems_task_entry +@item @code{@value{DIRPREFIX}task_entry} is the address of +the entry point to an RTEMS ASR. It is equivalent to the +entry point of the function implementing the ASR. + +@findex rtems_task_exitted_extension +@item @code{@value{DIRPREFIX}task_exitted_extension} is the +entry point for a task exitted user extension handler routine. + +@findex rtems_task_priority +@item @code{@value{DIRPREFIX}task_priority} is the data type +used to manage and manipulate task priorities. + +@findex rtems_task_restart_extension +@item @code{@value{DIRPREFIX}task_restart_extension} is the +entry point for a task restart user extension handler routine. + +@findex rtems_task_start_extension +@item @code{@value{DIRPREFIX}task_start_extension} is the +entry point for a task start user extension handler routine. + +@findex rtems_task_switch_extension +@item @code{@value{DIRPREFIX}task_switch_extension} is the +entry point for a task context switch user extension handler routine. + +@findex rtems_tcb +@item @code{@value{DIRPREFIX}tcb} is the data structure associated +with each task in an RTEMS system. + +@findex rtems_time_of_day +@item @code{@value{DIRPREFIX}time_of_day} is the data structure +used to manage and manipulate calendar time in RTEMS. + +@findex rtems_timer_service_routine +@item @code{@value{DIRPREFIX}timer_service_routine} is the +return type for an RTEMS Timer Service Routine. + +@findex rtems_timer_service_routine_entry +@item @code{@value{DIRPREFIX}timer_service_routine_entry} is the address of +the entry point to an RTEMS TSR. It is equivalent to the +entry point of the function implementing the TSR. + +@findex rtems_unsigned8 +@item @code{@value{DIRPREFIX}unsigned8} is the data +type that corresponds to unsigned eight bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_unsigned16 +@item @code{@value{DIRPREFIX}unsigned16} is the data +type that corresponds to unsigned sixteen bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_unsigned32 +@item @code{@value{DIRPREFIX}unsigned32} is the data +type that corresponds to unsigned thirty-two bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_unsigned64 +@item @code{@value{DIRPREFIX}unsigned64} is the data +type that corresponds to unsigned sixty-four bit integers. +This data type is defined by RTEMS in a manner that +ensures it is portable across different target processors. + +@findex rtems_vector_number +@item @code{@value{DIRPREFIX}vector_number} is the data +type used to manage and manipulate interrupt vector numbers. + +@end itemize diff --git a/doc/user/dirstat.texi b/doc/user/dirstat.texi new file mode 100644 index 0000000000..094bcf2b13 --- /dev/null +++ b/doc/user/dirstat.texi @@ -0,0 +1,42 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifinfo +@node Directive Status Codes, Example Application, Multiprocessing Manager MULTIPROCESSING_ANNOUNCE - Announce the arrival of a packet, Top +@end ifinfo +@chapter Directive Status Codes +@table @b +@item @code{@value{RPREFIX}SUCCESSFUL} - successful completion +@item @code{@value{RPREFIX}TASK_EXITTED} - returned from a task +@item @code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured +@item @code{@value{RPREFIX}INVALID_NAME} - invalid object name +@item @code{@value{RPREFIX}INVALID_ID} - invalid object id +@item @code{@value{RPREFIX}TOO_MANY} - too many +@item @code{@value{RPREFIX}TIMEOUT} - timed out waiting +@item @code{@value{RPREFIX}OBJECT_WAS_DELETED} - object was deleted while waiting +@item @code{@value{RPREFIX}INVALID_SIZE} - invalid specified size +@item @code{@value{RPREFIX}INVALID_ADDRESS} - invalid address specified +@item @code{@value{RPREFIX}INVALID_NUMBER} - number was invalid +@item @code{@value{RPREFIX}NOT_DEFINED} - item not initialized +@item @code{@value{RPREFIX}RESOURCE_IN_USE} - resources outstanding +@item @code{@value{RPREFIX}UNSATISFIED} - request not satisfied +@item @code{@value{RPREFIX}INCORRECT_STATE} - task is in wrong state +@item @code{@value{RPREFIX}ALREADY_SUSPENDED} - task already in state +@item @code{@value{RPREFIX}ILLEGAL_ON_SELF} - illegal for calling task +@item @code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - illegal for remote object +@item @code{@value{RPREFIX}CALLED_FROM_ISR} - invalid environment +@item @code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority +@item @code{@value{RPREFIX}INVALID_CLOCK} - invalid time buffer +@item @code{@value{RPREFIX}INVALID_NODE} - invalid node id +@item @code{@value{RPREFIX}NOT_CONFIGURED} - directive not configured +@item @code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - not owner of resource +@item @code{@value{RPREFIX}NOT_IMPLEMENTED} - directive not implemented +@item @code{@value{RPREFIX}INTERNAL_ERROR} - RTEMS inconsistency detected +@item @code{@value{RPREFIX}NO_MEMORY} - could not get enough memory +@end table + diff --git a/doc/user/dpmem.t b/doc/user/dpmem.t new file mode 100644 index 0000000000..b842b519b2 --- /dev/null +++ b/doc/user/dpmem.t @@ -0,0 +1,364 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Dual-Ported Memory Manager + +@cindex ports +@cindex dual ported memory + +@section Introduction + +The dual-ported memory manager provides a mechanism +for converting addresses between internal and external +representations for multiple dual-ported memory areas (DPMA). +The directives provided by the dual-ported memory manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}port_create} - Create a port +@item @code{@value{DIRPREFIX}port_ident} - Get ID of a port +@item @code{@value{DIRPREFIX}port_delete} - Delete a port +@item @code{@value{DIRPREFIX}port_external_to_internal} - Convert external to internal address +@item @code{@value{DIRPREFIX}port_internal_to_external} - Convert internal to external address +@end itemize + +@section Background + +@cindex dual ported memory, definition +@cindex external addresses, definition +@cindex internal addresses, definition + +A dual-ported memory area (DPMA) is an contiguous +block of RAM owned by a particular processor but which can be +accessed by other processors in the system. The owner accesses +the memory using internal addresses, while other processors must +use external addresses. RTEMS defines a port as a particular +mapping of internal and external addresses. + +There are two system configurations in which +dual-ported memory is commonly found. The first is +tightly-coupled multiprocessor computer systems where the +dual-ported memory is shared between all nodes and is used for +inter-node communication. The second configuration is computer +systems with intelligent peripheral controllers. These +controllers typically utilize the DPMA for high-performance data +transfers. + +@section Operations + +@subsection Creating a Port + +The @code{@value{DIRPREFIX}port_create} directive creates a port into a DPMA +with the user-defined name. The user specifies the association +between internal and external representations for the port being +created. RTEMS allocates a Dual-Ported Memory Control Block +(DPCB) from the DPCB free list to maintain the newly created +DPMA. RTEMS also generates a unique dual-ported memory port ID +which is returned to the calling task. RTEMS does not +initialize the dual-ported memory area or access any memory +within it. + +@subsection Obtaining Port IDs + +When a port is created, RTEMS generates a unique port +ID and assigns it to the created port until it is deleted. The +port ID may be obtained by either of two methods. First, as the +result of an invocation of the +@code{@value{DIRPREFIX}port_create} directive, the task +ID is stored in a user provided location. Second, the port ID +may be obtained later using the +@code{@value{DIRPREFIX}port_ident} directive. The port +ID is used by other dual-ported memory manager directives to +access this port. + +@subsection Converting an Address + +The @code{@value{DIRPREFIX}port_external_to_internal} directive is used to +convert an address from external to internal representation for +the specified port. +The @code{@value{DIRPREFIX}port_internal_to_external} directive is +used to convert an address from internal to external +representation for the specified port. If an attempt is made to +convert an address which lies outside the specified DPMA, then +the address to be converted will be returned. + +@subsection Deleting a DPMA Port + +A port can be removed from the system and returned to +RTEMS with the @code{@value{DIRPREFIX}port_delete} directive. When a port is deleted, +its control block is returned to the DPCB free list. + +@section Directives + +This section details the dual-ported memory manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection PORT_CREATE - Create a port + +@cindex create a port + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_port_create +@example +rtems_status_code rtems_port_create( + rtems_name name, + void *internal_start, + void *external_start, + rtems_unsigned32 length, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Port_Create ( + Name : in RTEMS.Name; + Internal_Start : in RTEMS.Address; + External_Start : in RTEMS.Address; + Length : in RTEMS.Unsigned32; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - port created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_ADDRESS} - address not on four byte boundary@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}TOO_MANY} - too many DP memory areas created + +@subheading DESCRIPTION: + +This directive creates a port which resides on the +local node for the specified DPMA. The assigned port id is +returned in id. This port id is used as an argument to other +dual-ported memory manager directives to convert addresses +within this DPMA. + +For control and maintenance of the port, RTEMS +allocates and initializes an DPCB from the DPCB free pool. Thus +memory from the dual-ported memory area is not used to store the +DPCB. + +@subheading NOTES: + +The internal_address and external_address parameters +must be on a four byte boundary. + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection PORT_IDENT - Get ID of a port + +@cindex get ID of a port +@cindex obtain ID of a port + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_port_ident +@example +rtems_status_code rtems_port_ident( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Port_Ident ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - port identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - port name not found + +@subheading DESCRIPTION: + +This directive obtains the port id associated with +the specified name to be acquired. If the port name is not +unique, then the port id will match one of the DPMAs with that +name. However, this port id is not guaranteed to correspond to +the desired DPMA. The port id is used to access this DPMA in +other dual-ported memory area related directives. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection PORT_DELETE - Delete a port + +@cindex delete a port + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_port_delete +@example +rtems_status_code rtems_port_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Port_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - port deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid port id + +@subheading DESCRIPTION: + +This directive deletes the dual-ported memory area +specified by id. The DPCB for the deleted dual-ported memory +area is reclaimed by RTEMS. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The calling task does not have to be the task that +created the port. Any local task that knows the port id can +delete the port. + +@c +@c +@c +@page +@subsection PORT_EXTERNAL_TO_INTERNAL - Convert external to internal address + +@cindex convert external to internal address + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_port_external_to_internal +@example +rtems_status_code rtems_port_external_to_internal( + rtems_id id, + void *external, + void **internal +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Port_External_To_Internal ( + ID : in RTEMS.ID; + External : in RTEMS.Address; + Internal : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{internal} is NULL@* +@code{@value{RPREFIX}SUCCESSFUL} - successful conversion + +@subheading DESCRIPTION: + +This directive converts a dual-ported memory address +from external to internal representation for the specified port. +If the given external address is invalid for the specified +port, then the internal address is set to the given external +address. + +@subheading NOTES: + +This directive is callable from an ISR. + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address + +@cindex convert internal to external address + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_port_internal_to_external +@example +rtems_status_code rtems_port_internal_to_external( + rtems_id id, + void *internal, + void **external +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Port_Internal_To_External ( + ID : in RTEMS.ID; + Internal : in RTEMS.Address; + External : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{external} is NULL@* +@code{@value{RPREFIX}SUCCESSFUL} - successful conversion + +@subheading DESCRIPTION: + +This directive converts a dual-ported memory address +from internal to external representation so that it can be +passed to owner of the DPMA represented by the specified port. +If the given internal address is an invalid dual-ported address, +then the external address is set to the given internal address. + +@subheading NOTES: + +This directive is callable from an ISR. + +This directive will not cause the calling task to be +preempted. + diff --git a/doc/user/event.t b/doc/user/event.t new file mode 100644 index 0000000000..13d5af980f --- /dev/null +++ b/doc/user/event.t @@ -0,0 +1,343 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Event Manager + +@cindex events + +@section Introduction + +The event manager provides a high performance method +of intertask communication and synchronization. The directives +provided by the event manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}event_send} - Send event set to a task +@item @code{@value{DIRPREFIX}event_receive} - Receive event condition +@end itemize + +@section Background + +@subsection Event Sets + +@cindex event flag, definition +@cindex event set, definition +@findex rtems_event_set + +An event flag is used by a task (or ISR) to inform +another task of the occurrence of a significant situation. +Thirty-two event flags are associated with each task. A +collection of one or more event flags is referred to as an event +set. The data type @code{@value{DIRPREFIX}event_set} is used to manage +event sets. + +The application developer should remember the following +key characteristics of event operations when utilizing the event +manager: + +@itemize @bullet +@item Events provide a simple synchronization facility. + +@item Events are aimed at tasks. + +@item Tasks can wait on more than one event simultaneously. + +@item Events are independent of one another. + +@item Events do not hold or transport data. + +@item Events are not queued. In other words, if an event is +sent more than once to a task before being received, the second and +subsequent send operations to that same task have no effect. +@end itemize + +An event set is posted when it is directed (or sent) to a task. A +pending event is an event that has been posted but not received. An event +condition is used to specify the event set which the task desires to receive +and the algorithm which will be used to determine when the request is +satisfied. An event condition is satisfied based upon one of two +algorithms which are selected by the user. The +@code{@value{RPREFIX}EVENT_ANY} algorithm states that an event condition +is satisfied when at least a single requested event is posted. The +@code{@value{RPREFIX}EVENT_ALL} algorithm states that an event condition +is satisfied when every requested event is posted. + +@subsection Building an Event Set or Condition + +@cindex event condition, building +@cindex event set, building + +An event set or condition is built by a bitwise OR of +the desired events. The set of valid events is @code{@value{RPREFIX}EVENT_0} through +@code{@value{RPREFIX}EVENT_31}. If an event is not explicitly specified in the set or +condition, then it is not present. Events are specifically +designed to be mutually exclusive, therefore bitwise OR and +addition operations are equivalent as long as each event appears +exactly once in the event set list. + +For example, when sending the event set consisting of +@code{@value{RPREFIX}EVENT_6}, @code{@value{RPREFIX}EVENT_15}, and @code{@value{RPREFIX}EVENT_31}, +the event parameter to the @code{@value{DIRPREFIX}event_send} +directive should be @code{@value{RPREFIX}EVENT_6 @value{OR} +@value{RPREFIX}EVENT_15 @value{OR} @value{RPREFIX}EVENT_31}. + +@subsection Building an EVENT_RECEIVE Option Set + +In general, an option is built by a bitwise OR of the +desired option components. The set of valid options for the +@code{@value{DIRPREFIX}event_receive} directive are listed +in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for event (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@item @code{@value{RPREFIX}EVENT_ALL} - return after all events (default) +@item @code{@value{RPREFIX}EVENT_ANY} - return after any events +@end itemize + +Option values are specifically designed to be +mutually exclusive, therefore bitwise OR and addition operations +are equivalent as long as each option appears exactly once in +the component list. An option listed as a default is not +required to appear in the option list, although it is a good +programming practice to specify default options. If all +defaults are desired, the option @code{@value{RPREFIX}DEFAULT_OPTIONS} should be +specified on this call. + +This example demonstrates the option parameter needed +to poll for all events in a particular event condition to +arrive. The option parameter passed to the +@code{@value{DIRPREFIX}event_receive} directive should be either +@code{@value{RPREFIX}EVENT_ALL @value{OR} @value{RPREFIX}NO_WAIT} +or @code{@value{RPREFIX}NO_WAIT}. The option parameter can be set to +@code{@value{RPREFIX}NO_WAIT} because @code{@value{RPREFIX}EVENT_ALL} is the +default condition for @code{@value{DIRPREFIX}event_receive}. + +@section Operations + +@subsection Sending an Event Set + +The @code{@value{DIRPREFIX}event_send} directive allows a task (or an ISR) to +direct an event set to a target task. Based upon the state of +the target task, one of the following situations applies: + +@itemize @bullet +@item Target Task is Blocked Waiting for Events + +@itemize - + +@item If the waiting task's input event condition is +satisfied, then the task is made ready for execution. + +@item If the waiting task's input event condition is not +satisfied, then the event set is posted but left pending and the +task remains blocked. + +@end itemize + +@item Target Task is Not Waiting for Events + +@itemize - +@item The event set is posted and left pending. +@end itemize + +@end itemize + +@subsection Receiving an Event Set + +The @code{@value{DIRPREFIX}event_receive} directive is used by tasks to +accept a specific input event condition. The task also +specifies whether the request is satisfied when all requested +events are available or any single requested event is available. +If the requested event condition is satisfied by pending +events, then a successful return code and the satisfying event +set are returned immediately. If the condition is not +satisfied, then one of the following situations applies: + +@itemize @bullet +@item By default, the calling task will wait forever for the +event condition to be satisfied. + +@item Specifying the @code{@value{RPREFIX}NO_WAIT} option forces an immediate return +with an error status code. + +@item Specifying a timeout limits the period the task will +wait before returning with an error status code. +@end itemize + +@subsection Determining the Pending Event Set + +A task can determine the pending event set by calling +the @code{@value{DIRPREFIX}event_receive} directive with a value of +@code{@value{RPREFIX}PENDING_EVENTS} for the input event condition. +The pending events are returned to the calling task but the event +set is left unaltered. + +@subsection Receiving all Pending Events + +A task can receive all of the currently pending +events by calling the @code{@value{DIRPREFIX}event_receive} +directive with a value of @code{@value{RPREFIX}ALL_EVENTS} +for the input event condition and +@code{@value{RPREFIX}NO_WAIT @value{OR} @value{RPREFIX}EVENT_ANY} +for the option set. The pending events are returned to the +calling task and the event set is cleared. If no events are +pending then the @code{@value{RPREFIX}UNSATISFIED} status code will be returned. + +@section Directives + +This section details the event manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection EVENT_SEND - Send event set to a task + +@cindex send event set to a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_event_send +@example +rtems_status_code rtems_event_send ( + rtems_id id, + rtems_event_set event_in +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Event_Send ( + ID : in RTEMS.ID; + Event_In : in RTEMS.Event_Set; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - event set sent successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id + +@subheading DESCRIPTION: + +This directive sends an event set, event_in, to the +task specified by id. If a blocked task's input event condition +is satisfied by this directive, then it will be made ready. If +its input event condition is not satisfied, then the events +satisfied are updated and the events not satisfied are left +pending. If the task specified by id is not blocked waiting for +events, then the events sent are left pending. + +@subheading NOTES: + +Specifying @code{@value{RPREFIX}SELF} for id results in the event set being +sent to the calling task. + +Identical events sent to a task are not queued. In +other words, the second, and subsequent, posting of an event to +a task before it can perform an @code{@value{DIRPREFIX}event_receive} +has no effect. + +The calling task will be preempted if it has +preemption enabled and a higher priority task is unblocked as +the result of this directive. + +Sending an event set to a global task which does not +reside on the local node will generate a request telling the +remote node to send the event set to the appropriate task. + +@c +@c +@c +@page +@subsection EVENT_RECEIVE - Receive event condition + +@cindex receive event condition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_event_receive +@example +rtems_status_code rtems_event_receive ( + rtems_event_set event_in, + rtems_option option_set, + rtems_interval ticks, + rtems_event_set *event_out +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Event_Receive ( + Event_In : in RTEMS.Event_Set; + Option_Set : in RTEMS.Option; + Ticks : in RTEMS.Interval; + Event_Out : out RTEMS.Event_Set; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - event received successfully@* +@code{@value{RPREFIX}UNSATISFIED} - input event not satisfied (@code{@value{RPREFIX}NO_WAIT})@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{event_out} is NULL@* +@code{@value{RPREFIX}TIMEOUT} - timed out waiting for event + +@subheading DESCRIPTION: + +This directive attempts to receive the event +condition specified in event_in. If event_in is set to +@code{@value{RPREFIX}PENDING_EVENTS}, then the current pending events are returned in +event_out and left pending. The @code{@value{RPREFIX}WAIT} and @code{@value{RPREFIX}NO_WAIT} options in the +option_set parameter are used to specify whether or not the task +is willing to wait for the event condition to be satisfied. +@code{@value{RPREFIX}EVENT_ANY} and @code{@value{RPREFIX}EVENT_ALL} are used in the option_set parameter are +used to specify whether a single event or the complete event set +is necessary to satisfy the event condition. The event_out +parameter is returned to the calling task with the value that +corresponds to the events in event_in that were satisfied. + +If pending events satisfy the event condition, then +event_out is set to the satisfied events and the pending events +in the event condition are cleared. If the event condition is +not satisfied and @code{@value{RPREFIX}NO_WAIT} is specified, then event_out is set to +the currently satisfied events. If the calling task chooses to +wait, then it will block waiting for the event condition. + +If the calling task must wait for the event condition +to be satisfied, then the timeout parameter is used to specify +the maximum interval to wait. If it is set to @code{@value{RPREFIX}NO_TIMEOUT}, then +the calling task will wait forever. + +@subheading NOTES: + +This directive only affects the events specified in +event_in. Any pending events that do not correspond to any of +the events specified in event_in will be left pending. + +The following event receive option constants are defined by +RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} task will wait for event (default) +@item @code{@value{RPREFIX}NO_WAIT} task should not wait +@item @code{@value{RPREFIX}EVENT_ALL} return after all events (default) +@item @code{@value{RPREFIX}EVENT_ANY} return after any events +@end itemize + +A clock tick is required to support the functionality of this directive. diff --git a/doc/user/example.texi b/doc/user/example.texi new file mode 100644 index 0000000000..edbe5a2257 --- /dev/null +++ b/doc/user/example.texi @@ -0,0 +1,88 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifinfo +@node Example Application, Glossary, Directive Status Codes, Top +@end ifinfo +@chapter Example Application + +@example +/* + * This file contains an example of a simple RTEMS + * application. It instantiates the RTEMS Configuration + * Information using confdef.h and contains two tasks: + * a * user initialization task and a simple task. + * + * This example assumes that a board support package exists. + */ + +#include <rtems.h> + +rtems_task user_application(rtems_task_argument argument); + +rtems_task init_task( + rtems_task_argument ignored +) +@{ + rtems_id tid; + rtems_status_code status; + rtems_name name; + + name = rtems_build_name( 'A', 'P', 'P', '1' ) + + status = rtems_task_create( + name, 1, RTEMS_MINIMUM_STACK_SIZE, + RTEMS_NO_PREEMPT, RTEMS_FLOATING_POINT, &tid + ); + if ( status != RTEMS_STATUS_SUCCESSFUL ) @{ + printf( "rtems_task_create failed with status of %d.\n", status ); + exit( 1 ); + @} + + status = rtems_task_start( tid, user_application, 0 ); + if ( status != RTEMS_STATUS_SUCCESSFUL ) @{ + printf( "rtems_task_start failed with status of %d.\n", status ); + exit( 1 ); + @} + + status = rtems_task_delete( SELF ); /* should not return */ + printf( "rtems_task_delete returned with status of %d.\n", status ); + exit( 1 ); +@} + + +rtems_task user_application(rtems_task_argument argument) +@{ + /* application specific initialization goes here */ + + while ( 1 ) @{ /* infinite loop */ + + /* APPLICATION CODE GOES HERE + * + * This code will typically include at least one + * directive which causes the calling task to + * give up the processor. + */ + @} +@} + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER /* for stdio */ +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER /* for time services */ + +#define CONFIGURE_MAXIMUM_TASKS 2 + +#define CONFIGURE_INIT_TASK_NAME rtems_build_name( 'E', 'X', 'A', 'M' ) +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <confdefs.h> +@end example + + + diff --git a/doc/user/fatal.t b/doc/user/fatal.t new file mode 100644 index 0000000000..9127f98b09 --- /dev/null +++ b/doc/user/fatal.t @@ -0,0 +1,172 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Fatal Error Manager + +@cindex fatal errors + +@section Introduction + +The fatal error manager processes all fatal or +irrecoverable errors. The directive provided by the fatal error +manager is: + +@itemize @bullet +@item @code{@value{DIRPREFIX}fatal_error_occurred} - Invoke the fatal error handler +@end itemize + +@section Background + +@cindex fatal error detection +@cindex fatal error processing +@cindex fatal error user extension + +The fatal error manager is called upon detection of +an irrecoverable error condition by either RTEMS or the +application software. Fatal errors can be detected from three +sources: + +@itemize @bullet +@item the executive (RTEMS) +@item user system code +@item user application code +@end itemize + +RTEMS automatically invokes the fatal error manager +upon detection of an error it considers to be fatal. Similarly, +the user should invoke the fatal error manager upon detection of +a fatal error. + +Each status or dynamic user extension set may include +a fatal error handler. The fatal error handler in the static +extension set can be used to provide access to debuggers and +monitors which may be present on the target hardware. If any +user-supplied fatal error handlers are installed, the fatal +error manager will invoke them. If no user handlers are +configured or if all the user handler return control to the +fatal error manager, then the RTEMS default fatal error handler +is invoked. If the default fatal error handler is invoked, then +the system state is marked as failed. + +Although the precise behavior of the default fatal +error handler is processor specific, in general, it will disable +all maskable interrupts, place the error code in a known +processor dependent place (generally either on the stack or in a +register), and halt the processor. The precise actions of the +RTEMS fatal error are discussed in the Default Fatal Error +Processing chapter of the Applications Supplement document for +a specific target processor. + +@section Operations + +@subsection Announcing a Fatal Error + +@findex _Internal_errors_What_happened + +The @code{@value{DIRPREFIX}fatal_error_occurred} directive is invoked when a +fatal error is detected. Before invoking any user-supplied +fatal error handlers or the RTEMS fatal error handler, the +@code{@value{DIRPREFIX}fatal_error_occurred} +directive stores useful information in the +variable @code{_Internal_errors_What_happened}. This @value{STRUCTURE} +contains three pieces of information: + +@itemize @bullet +@item the source of the error (API or executive core), + +@item whether the error was generated internally by the +executive, and a + +@item a numeric code to indicate the error type. +@end itemize + +The error type indicator is dependent on the source +of the error and whether or not the error was internally +generated by the executive. If the error was generated +from an API, then the error code will be of that API's +error or status codes. The status codes for the RTEMS +API are in cpukit/rtems/include/rtems/rtems/status.h. Those +for the POSIX API can be found in <errno.h>. + +The @code{@value{DIRPREFIX}fatal_error_occurred} directive is responsible +for invoking an optional user-supplied fatal error handler +and/or the RTEMS fatal error handler. All fatal error handlers +are passed an error code to describe the error detected. + +Occasionally, an application requires more +sophisticated fatal error processing such as passing control to +a debugger. For these cases, a user-supplied fatal error +handler can be specified in the RTEMS configuration table. The +User Extension Table field fatal contains the address of the +fatal error handler to be executed when the +@code{@value{DIRPREFIX}fatal_error_occurred} +directive is called. If the field is set to NULL or if the +configured fatal error handler returns to the executive, then +the default handler provided by RTEMS is executed. This default +handler will halt execution on the processor where the error +occurred. + +@section Directives + +This section details the fatal error manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection FATAL_ERROR_OCCURRED - Invoke the fatal error handler + +@cindex announce fatal error +@cindex fatal error, announce + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_fatal_error_occurred +@example +void volatile rtems_fatal_error_occurred( + rtems_unsigned32 the_error +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Fatal_Error_Occurred ( + The_Error : in RTEMS.Unsigned32 +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES + +NONE + +@subheading DESCRIPTION: + +This directive processes fatal errors. If the FATAL +error extension is defined in the configuration table, then the +user-defined error extension is called. If configured and the +provided FATAL error extension returns, then the RTEMS default +error handler is invoked. This directive can be invoked by +RTEMS or by the user's application code including initialization +tasks, other tasks, and ISRs. + +@subheading NOTES: + +This directive supports local operations only. + +Unless the user-defined error extension takes special +actions such as restarting the calling task, this directive WILL +NOT RETURN to the caller. + +The user-defined extension for this directive may +wish to initiate a global shutdown. diff --git a/doc/user/glossary.texi b/doc/user/glossary.texi new file mode 100644 index 0000000000..f9e8d6f7ea --- /dev/null +++ b/doc/user/glossary.texi @@ -0,0 +1,771 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifinfo +@node Glossary, Command and Variable Index, Example Application, Top +@end ifinfo +@chapter Glossary + +@table @b +@item active +A term used to describe an object +which has been created by an application. + +@item aperiodic task +A task which must execute only at +irregular intervals and has only a soft deadline. + +@item application +In this document, software which makes +use of RTEMS. + +@item ASR +see Asynchronous Signal Routine. + +@item asynchronous +Not related in order or timing to +other occurrences in the system. + +@item Asynchronous Signal Routine +Similar to a hardware +interrupt except that it is associated with a task and is run in +the context of a task. The directives provided by the signal +manager are used to service signals. + +@item awakened +A term used to describe a task that has +been unblocked and may be scheduled to the CPU. + +@item big endian +A data representation scheme in which +the bytes composing a numeric value are arranged such that the +most significant byte is at the lowest address. + +@item bit-mapped +A data encoding scheme in which each bit +in a variable is used to represent something different. This +makes for compact data representation. + +@item block +A physically contiguous area of memory. + +@item blocked +The task state entered by a task which has +been previously started and cannot continue execution until the +reason for waiting has been satisfied. + +@item broadcast +To simultaneously send a message to a +logical set of destinations. + +@item BSP +see Board Support Package. + +@item Board Support Package +A collection of device +initialization and control routines specific to a particular +type of board or collection of boards. + +@item buffer +A fixed length block of memory allocated +from a partition. + +@item calling convention +The processor and compiler +dependent rules which define the mechanism used to invoke +subroutines in a high-level language. These rules define the +passing of arguments, the call and return mechanism, and the +register set which must be preserved. + +@item Central Processing Unit +This term is equivalent to +the terms processor and microprocessor. + +@item chain +A data structure which allows for efficient +dynamic addition and removal of elements. It differs from an +array in that it is not limited to a predefined size. + +@item coalesce +The process of merging adjacent holes into +a single larger hole. Sometimes this process is referred to as +garbage collection. + +@item Configuration Table +A table which contains +information used to tailor RTEMS for a particular application. + +@item context +All of the processor registers and +operating system data structures associated with a task. + +@item context switch +Alternate term for task switch. +Taking control of the processor from one task and transferring +it to another task. + +@item control block +A data structure used by the +executive to define and control an object. + +@item core +When used in this manual, this term refers to +the internal executive utility functions. In the interest of +application portability, the core of the executive should not be +used directly by applications. + +@item CPU +An acronym for Central Processing Unit. + +@item critical section +A section of code which must be +executed indivisibly. + +@item CRT +An acronym for Cathode Ray Tube. Normally used +in reference to the man-machine interface. + +@item deadline +A fixed time limit by which a task must +have completed a set of actions. Beyond this point, the results +are of reduced value and may even be considered useless or +harmful. + +@item device +A peripheral used by the application that +requires special operation software. See also device driver. + +@item device driver +Control software for special +peripheral devices used by the application. + +@item directives +RTEMS' provided routines that provide +support mechanisms for real-time applications. + +@item dispatch +The act of loading a task's context onto +the CPU and transferring control of the CPU to that task. + +@item dormant +The state entered by a task after it is +created and before it has been started. + +@item Device Driver Table +A table which contains the +entry points for each of the configured device drivers. + +@item dual-ported +A term used to describe memory which +can be accessed at two different addresses. + +@item embedded +An application that is delivered as a +hidden part of a larger system. For example, the software in a +fuel-injection control system is an embedded application found +in many late-model automobiles. + +@item envelope +A buffer provided by the MPCI layer to +RTEMS which is used to pass messages between nodes in a +multiprocessor system. It typically contains routing +information needed by the MPCI. The contents of an envelope are +referred to as a packet. + +@item entry point +The address at which a function or task +begins to execute. In C, the entry point of a function is the +function's name. + +@item events +A method for task communication and +synchronization. The directives provided by the event manager +are used to service events. + +@item exception +A synonym for interrupt. + +@item executing +The task state entered by a task after it +has been given control of the CPU. + +@item executive +In this document, this term is used to +referred to RTEMS. Commonly, an executive is a small real-time +operating system used in embedded systems. + +@item exported +An object known by all nodes in a +multiprocessor system. An object created with the GLOBAL +attribute will be exported. + +@item external address +The address used to access +dual-ported memory by all the nodes in a system which do not own +the memory. + +@item FIFO +An acronym for First In First Out. + +@item First In First Out +A discipline for manipulating entries in a data structure. + +@item floating point coprocessor +A component used in +computer systems to enhance performance in mathematically +intensive situations. It is typically viewed as a logical +extension of the primary processor. + +@item freed +A resource that has been released by the +application to RTEMS. + +@item global +An object that has been created with the +GLOBAL attribute and exported to all nodes in a multiprocessor +system. + +@item handler +The equivalent of a manager, except that it +is internal to RTEMS and forms part of the core. A handler is a +collection of routines which provide a related set of functions. +For example, there is a handler used by RTEMS to manage all +objects. + +@item hard real-time system +A real-time system in which a +missed deadline causes the worked performed to have no value or +to result in a catastrophic effect on the integrity of the +system. + +@item heap +A data structure used to dynamically allocate +and deallocate variable sized blocks of memory. + +@item heterogeneous +A multiprocessor computer system composed of dissimilar processors. + +@item homogeneous +A multiprocessor computer system composed of a single type of processor. + +@item ID +An RTEMS assigned identification tag used to +access an active object. + +@item IDLE task +A special low priority task which assumes +control of the CPU when no other task is able to execute. + +@item interface +A specification of the methodology used +to connect multiple independent subsystems. + +@item internal address +The address used to access +dual-ported memory by the node which owns the memory. + +@item interrupt +A hardware facility that causes the CPU +to suspend execution, save its status, and transfer control to a +specific location. + +@item interrupt level +A mask used to by the CPU to +determine which pending interrupts should be serviced. If a +pending interrupt is below the current interrupt level, then the +CPU does not recognize that interrupt. + +@item Interrupt Service Routine +An ISR is invoked by the +CPU to process a pending interrupt. + +@item I/O +An acronym for Input/Output. + +@item ISR +An acronym for Interrupt Service Routine. + +@item kernel +In this document, this term is used as a +synonym for executive. + +@item list +A data structure which allows for dynamic +addition and removal of entries. It is not statically limited +to a particular size. + +@item little endian +A data representation scheme in which +the bytes composing a numeric value are arranged such that the +least significant byte is at the lowest address. + +@item local +An object which was created with the LOCAL +attribute and is accessible only on the node it was created and +resides upon. In a single processor configuration, all objects +are local. + +@item local operation +The manipulation of an object which +resides on the same node as the calling task. + +@item logical address +An address used by an application. +In a system without memory management, logical addresses will +equal physical addresses. + +@item loosely-coupled +A multiprocessor configuration +where shared memory is not used for communication. + +@item major number +The index of a device driver in the +Device Driver Table. + +@item manager +A group of related RTEMS' directives which +provide access and control over resources. + +@item memory pool +Used interchangeably with heap. + +@item message +A sixteen byte entity used to communicate +between tasks. Messages are sent to message queues and stored +in message buffers. + +@item message buffer +A block of memory used to store +messages. + +@item message queue +An RTEMS object used to synchronize +and communicate between tasks by transporting messages between +sending and receiving tasks. + +@item Message Queue Control Block +A data structure associated with each message queue used by RTEMS +to manage that message queue. + +@item minor number +A numeric value passed to a device +driver, the exact usage of which is driver dependent. + +@item mode +An entry in a task's control block that is +used to determine if the task allows preemption, timeslicing, +processing of signals, and the interrupt disable level used by +the task. + +@item MPCI +An acronym for Multiprocessor Communications +Interface Layer. + +@item multiprocessing +The simultaneous execution of two +or more processes by a multiple processor computer system. + +@item multiprocessor +A computer with multiple CPUs +available for executing applications. + +@item Multiprocessor Communications Interface Layer +A set +of user-provided routines which enable the nodes in a +multiprocessor system to communicate with one another. + +@item Multiprocessor Configuration Table +The data structure defining the characteristics of the multiprocessor +target system with which RTEMS will communicate. + +@item multitasking +The alternation of execution amongst a +group of processes on a single CPU. A scheduling algorithm is +used to determine which process executes at which time. + +@item mutual exclusion +A term used to describe the act of +preventing other tasks from accessing a resource simultaneously. + +@item nested +A term used to describe an ASR that occurs +during another ASR or an ISR that occurs during another ISR. + +@item node +A term used to reference a processor running +RTEMS in a multiprocessor system. + +@item non-existent +The state occupied by an uncreated or +deleted task. + +@item numeric coprocessor +A component used in computer +systems to enhance performance in mathematically intensive +situations. It is typically viewed as a logical extension of +the primary processor. + +@item object +In this document, this term is used to refer +collectively to tasks, timers, message queues, partitions, +regions, semaphores, ports, and rate monotonic periods. All +RTEMS objects have IDs and user-assigned names. + +@item object-oriented +A term used to describe systems +with common mechanisms for utilizing a variety of entities. +Object-oriented systems shield the application from +implementation details. + +@item operating system +The software which controls all +the computer's resources and provides the base upon which +application programs can be written. + +@item overhead +The portion of the CPUs processing power +consumed by the operating system. + +@item packet +A buffer which contains the messages passed +between nodes in a multiprocessor system. A packet is the +contents of an envelope. + +@item partition +An RTEMS object which is used to allocate +and deallocate fixed size blocks of memory from an dynamically +specified area of memory. + +@item Partition Control Block +A data structure associated +with each partition used by RTEMS to manage that partition. + +@item pending +A term used to describe a task blocked +waiting for an event, message, semaphore, or signal. + +@item periodic task +A task which must execute at regular +intervals and comply with a hard deadline. + +@item physical address +The actual hardware address of a +resource. + +@item poll +A mechanism used to determine if an event has +occurred by periodically checking for a particular status. +Typical events include arrival of data, completion of an action, +and errors. + +@item pool +A collection from which resources are +allocated. + +@item portability +A term used to describe the ease with +which software can be rehosted on another computer. + +@item posting +The act of sending an event, message, +semaphore, or signal to a task. + +@item preempt +The act of forcing a task to relinquish the +processor and dispatching to another task. + +@item priority +A mechanism used to represent the relative +importance of an element in a set of items. RTEMS uses priority +to determine which task should execute. + +@item priority inheritance +An algorithm that calls for +the lower priority task holding a resource to have its priority +increased to that of the highest priority task blocked waiting +for that resource. This avoids the problem of priority +inversion. + +@item priority inversion +A form of indefinite +postponement which occurs when a high priority tasks requests +access to shared resource currently allocated to low priority +task. The high priority task must block until the low priority +task releases the resource. + +@item processor utilization +The percentage of processor +time used by a task or a set of tasks. + +@item proxy +An RTEMS control structure used to represent, +on a remote node, a task which must block as part of a remote +operation. + +@item Proxy Control Block +A data structure associated +with each proxy used by RTEMS to manage that proxy. + +@item PTCB +An acronym for Partition Control Block. + +@item PXCB +An acronym for Proxy Control Block. + +@item quantum +The application defined unit of time in +which the processor is allocated. + +@item queue +Alternate term for message queue. + +@item QCB +An acronym for Message Queue Control Block. + +@item ready +A task occupies this state when it is +available to be given control of the CPU. + +@item real-time +A term used to describe systems which are +characterized by requiring deterministic response times to +external stimuli. The external stimuli require that the +response occur at a precise time or the response is incorrect. + +@item reentrant +A term used to describe routines which do +not modify themselves or global variables. + +@item region +An RTEMS object which is used to allocate +and deallocate variable size blocks of memory from a dynamically +specified area of memory. + +@item Region Control Block +A data structure associated +with each region used by RTEMS to manage that region. + +@item registers +Registers are locations physically +located within a component, typically used for device control or +general purpose storage. + +@item remote +Any object that does not reside on the local +node. + +@item remote operation +The manipulation of an object +which does not reside on the same node as the calling task. + +@item return code +Also known as error code or return +value. + +@item resource +A hardware or software entity to which +access must be controlled. + +@item resume +Removing a task from the suspend state. If +the task's state is ready following a call to the +@code{@value{DIRPREFIX}task_resume} +directive, then the task is available for scheduling. + +@item return code +A value returned by RTEMS directives to +indicate the completion status of the directive. + +@item RNCB +An acronym for Region Control Block. + +@item round-robin +A task scheduling discipline in which +tasks of equal priority are executed in the order in which they +are made ready. + +@item RS-232 +A standard for serial communications. + +@item running +The state of a rate monotonic timer while +it is being used to delineate a period. The timer exits this +state by either expiring or being canceled. + +@item schedule +The process of choosing which task should +next enter the executing state. + +@item schedulable +A set of tasks which can be guaranteed +to meet their deadlines based upon a specific scheduling +algorithm. + +@item segments +Variable sized memory blocks allocated +from a region. + +@item semaphore +An RTEMS object which is used to +synchronize tasks and provide mutually exclusive access to +resources. + +@item Semaphore Control Block +A data structure associated +with each semaphore used by RTEMS to manage that semaphore. + +@item shared memory +Memory which is accessible by +multiple nodes in a multiprocessor system. + +@item signal +An RTEMS provided mechanism to communicate +asynchronously with a task. Upon reception of a signal, the ASR +of the receiving task will be invoked. + +@item signal set +A thirty-two bit entity which is used to +represent a task's collection of pending signals and the signals +sent to a task. + +@item SMCB +An acronym for Semaphore Control Block. + +@item soft real-time system +A real-time system in which a +missed deadline does not compromise the integrity of the system. + +@item sporadic task +A task which executes at irregular +intervals and must comply with a hard deadline. A minimum +period of time between successive iterations of the task can be +guaranteed. + +@item stack +A data structure that is managed using a Last +In First Out (LIFO) discipline. Each task has a stack +associated with it which is used to store return information +and local variables. + +@item status code +Also known as error code or return +value. + +@item suspend +A term used to describe a task that is not +competing for the CPU because it has had a +@code{@value{DIRPREFIX}task_suspend} directive. + +@item synchronous +Related in order or timing to other +occurrences in the system. + +@item system call +In this document, this is used as an +alternate term for directive. + +@item target +The system on which the application will +ultimately execute. + +@item task +A logically complete thread of execution. The +CPU is allocated among the ready tasks. + +@item Task Control Block +A data structure associated with +each task used by RTEMS to manage that task. + +@item task switch +Alternate terminology for context +switch. Taking control of the processor from one task and given +to another. + +@item TCB +An acronym for Task Control Block. + +@item tick +The basic unit of time used by RTEMS. It is a +user-configurable number of microseconds. The current tick +expires when the @code{@value{DIRPREFIX}clock_tick} +directive is invoked. + +@item tightly-coupled +A multiprocessor configuration +system which communicates via shared memory. + +@item timeout +An argument provided to a number of +directives which determines the maximum length of time an +application task is willing to wait to acquire the resource if +it is not immediately available. + +@item timer +An RTEMS object used to invoke subprograms at +a later time. + +@item Timer Control Block +A data structure associated +with each timer used by RTEMS to manage that timer. + +@item timeslicing +A task scheduling discipline in which +tasks of equal priority are executed for a specific period of +time before being preempted by another task. + +@item timeslice +The application defined unit of time in +which the processor is allocated. + +@item TMCB +An acronym for Timer Control Block. + +@item transient overload +A temporary rise in system +activity which may cause deadlines to be missed. Rate Monotonic +Scheduling can be used to determine if all deadlines will be met +under transient overload. + +@item user extensions +Software routines provided by the +application to enhance the functionality of RTEMS. + +@item User Extension Table +A table which contains the +entry points for each user extensions. + +@item User Initialization Tasks Table +A table which +contains the information needed to create and start each of the +user initialization tasks. + +@item user-provided +Alternate term for user-supplied. +This term is used to designate any software routines which must +be written by the application designer. + +@item user-supplied +Alternate term for user-provided. +This term is used to designate any software routines which must +be written by the application designer. + +@item vector +Memory pointers used by the processor to +fetch the address of routines which will handle various +exceptions and interrupts. + +@item wait queue +The list of tasks blocked pending the +release of a particular resource. Message queues, regions, and +semaphores have a wait queue associated with them. + +@item yield +When a task voluntarily releases control of the processor. + +@end table + diff --git a/doc/user/init.t b/doc/user/init.t new file mode 100644 index 0000000000..24625e4b6b --- /dev/null +++ b/doc/user/init.t @@ -0,0 +1,416 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Initialization Manager + +@section Introduction + +The initialization manager is responsible for +initiating and shutting down RTEMS. Initiating RTEMS involves +creating and starting all configured initialization tasks, and +for invoking the initialization routine for each user-supplied +device driver. In a multiprocessor configuration, this manager +also initializes the interprocessor communications layer. The +directives provided by the initialization manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}initialize_executive} - Initialize RTEMS +@item @code{@value{DIRPREFIX}initialize_executive_early} - Initialize RTEMS and do NOT Start Multitasking +@item @code{@value{DIRPREFIX}initialize_executive_late} - Complete Initialization and Start Multitasking +@item @code{@value{DIRPREFIX}shutdown_executive} - Shutdown RTEMS +@end itemize + +@section Background + +@subsection Initialization Tasks + +@cindex initialization tasks + +Initialization task(s) are the mechanism by which +RTEMS transfers initial control to the user's application. +Initialization tasks differ from other application tasks in that +they are defined in the User Initialization Tasks Table and +automatically created and started by RTEMS as part of its +initialization sequence. Since the initialization tasks are +scheduled using the same algorithm as all other RTEMS tasks, +they must be configured at a priority and mode which will insure +that they will complete execution before other application tasks +execute. Although there is no upper limit on the number of +initialization tasks, an application is required to define at +least one. + +A typical initialization task will create and start +the static set of application tasks. It may also create any +other objects used by the application. Initialization tasks +which only perform initialization should delete themselves upon +completion to free resources for other tasks. Initialization +tasks may transform themselves into a "normal" application task. +This transformation typically involves changing priority and +execution mode. RTEMS does not automatically delete the +initialization tasks. + +@subsection The System Initialization Task + +The System Initialization Task is responsible for +initializing all device drivers. As a result, this task has a +higher priority than all other tasks to insure that no +application tasks executes until all device drivers are +initialized. After device initialization in a single processor +system, this task will delete itself. + +The System Initialization Task must have enough stack +space to successfully execute the initialization routines for +all device drivers and, in multiprocessor configurations, the +Multiprocessor Communications Interface Layer initialization +routine. The CPU Configuration Table contains a field which +allows the application or BSP to increase the default amount of +stack space allocated for this task. + +In multiprocessor configurations, the System +Initialization Task does not delete itself after initializing +the device drivers. Instead it transforms itself into the +Multiprocessing Server which initializes the Multiprocessor +Communications Interface Layer, verifies multiprocessor system +consistency, and processes all requests from remote nodes. + +@subsection The Idle Task + +The Idle Task is the lowest priority task in a system +and executes only when no other task is ready to execute. This +task consists of an infinite loop and will be preempted when any +other task is made ready to execute. + +@subsection Initialization Manager Failure + +The @code{@value{DIRPREFIX}ifatal_error_occurred} directive will be called +from @code{@value{DIRPREFIX}initialize_executive} +for any of the following reasons: + +@itemize @bullet +@item If either the Configuration Table or the CPU Dependent +Information Table is not provided. + +@item If the starting address of the RTEMS RAM Workspace, +supplied by the application in the Configuration Table, is NULL +or is not aligned on a four-byte boundary. + +@item If the size of the RTEMS RAM Workspace is not large +enough to initialize and configure the system. + +@item If the interrupt stack size specified is too small. + +@item If multiprocessing is configured and the node entry in +the Multiprocessor Configuration Table is not between one and +the maximum_nodes entry. + +@item If a multiprocessor system is being configured and no +Multiprocessor Communications Interface is specified. + +@item If no user initialization tasks are configured. At +least one initialization task must be configured to allow RTEMS +to pass control to the application at the end of the executive +initialization sequence. + +@item If any of the user initialization tasks cannot be +created or started successfully. +@end itemize + +@section Operations + +@subsection Initializing RTEMS + +The @code{@value{DIRPREFIX}initialize_executive} +directive is called by the +board support package at the completion of its initialization +sequence. RTEMS assumes that the board support package +successfully completed its initialization activities. The +@code{@value{DIRPREFIX}initialize_executive} +directive completes the initialization +sequence by performing the following actions: + +@itemize @bullet +@item Initializing internal RTEMS variables; +@item Allocating system resources; +@item Creating and starting the System Initialization Task; +@item Creating and starting the Idle Task; +@item Creating and starting the user initialization task(s); and +@item Initiating multitasking. +@end itemize + +This directive MUST be called before any other RTEMS +directives. The effect of calling any RTEMS directives before +@code{@value{DIRPREFIX}initialize_executive} +is unpredictable. Many of RTEMS actions +during initialization are based upon the contents of the +Configuration Table and CPU Dependent Information Table. For +more information regarding the format and contents of these +tables, please refer to the chapter Configuring a System. + +The final step in the initialization sequence is the +initiation of multitasking. When the scheduler and dispatcher +are enabled, the highest priority, ready task will be dispatched +to run. Control will not be returned to the board support +package after multitasking is enabled until +@code{@value{DIRPREFIX}shutdown_executive} +the directive is called. + +The @code{@value{DIRPREFIX}initialize_executive} +directive provides a +conceptually simple way to initialize RTEMS. However, in +certain cases, this mechanism cannot be used. The +@code{@value{DIRPREFIX}initialize_executive_early} +and @code{@value{DIRPREFIX}initialize_executive_late} +directives are provided as an alternative mechanism for +initializing RTEMS. The +@code{@value{DIRPREFIX}initialize_executive_early} directive +returns to the caller BEFORE initiating multitasking. The +@code{@value{DIRPREFIX}initialize_executive_late} +directive is invoked to start +multitasking. It is critical that only one of the RTEMS +initialization sequences be used in an application. + +@subsection Shutting Down RTEMS + +The @code{@value{DIRPREFIX}shutdown_executive} directive is invoked by the +application to end multitasking and return control to the board +support package. The board support package resumes execution at +the code immediately following the invocation of the +@code{@value{DIRPREFIX}initialize_executive} directive. + +@section Directives + +This section details the initialization manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@page +@subsection INITIALIZE_EXECUTIVE - Initialize RTEMS + +@cindex initialize RTEMS + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_initialize_executive +@example +void rtems_initialize_executive( + rtems_configuration_table *configuration_table, + rtems_cpu_table *cpu_table +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Initialize_Executive ( + Configuration_Table : in RTEMS.Configuration_Table_Pointer; + CPU_Table : in RTEMS.CPU_Table_Pointer +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive is called when the board support +package has completed its initialization to allow RTEMS to +initialize the application environment based upon the +information in the Configuration Table, CPU Dependent +Information Table, User Initialization Tasks Table, Device +Driver Table, User Extension Table, Multiprocessor Configuration +Table, and the Multiprocessor Communications Interface (MPCI) +Table. This directive starts multitasking and does not return +to the caller until the @code{@value{DIRPREFIX}shutdown_executive} +directive is invoked. + +@subheading NOTES: + +This directive MUST be the first RTEMS directive +called and it DOES NOT RETURN to the caller until the +@code{@value{DIRPREFIX}shutdown_executive} +is invoked. + +This directive causes all nodes in the system to +verify that certain configuration parameters are the same as +those of the local node. If an inconsistency is detected, then +a fatal error is generated. + +The application must use only one of the two +initialization sequences: +@code{@value{DIRPREFIX}initialize_executive} or +@code{@value{DIRPREFIX}initialize_executive_early} and +@code{@value{DIRPREFIX}initialize_executive_late}. The +@code{@value{DIRPREFIX}initialize_executive} +directive is logically equivalent to invoking +@code{@value{DIRPREFIX}initialize_executive_early} and +@code{@value{DIRPREFIX}initialize_executive_late} +with no intervening actions. + +@page +@subsection INITIALIZE_EXECUTIVE_EARLY - Initialize RTEMS and do NOT Start Multitasking + +@cindex initialize RTEMS + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_initialize_executive_early +@example +rtems_interrupt_level rtems_initialize_executive_early( + rtems_configuration_table *configuration_table, + rtems_cpu_table *cpu_table +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Initialize_Executive_Early( + Configuration_Table : in RTEMS.Configuration_Table_Pointer; + CPU_Table : in RTEMS.Cpu_Table; + Level : out RTEMS.ISR_Level +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive is called when the board support +package has completed its initialization to allow RTEMS to +initialize the application environment based upon the +information in the Configuration Table, CPU Dependent +Information Table, User Initialization Tasks Table, Device +Driver Table, User Extension Table, Multiprocessor Configuration +Table, and the Multiprocessor Communications Interface (MPCI) +Table. This directive returns to the caller after completing +the basic RTEMS initialization but before multitasking is +initiated. The interrupt level in place when the directive is +invoked is returned to the caller. This interrupt level should +be the same one passed to +@code{@value{DIRPREFIX}initialize_executive_late}. + +@subheading NOTES: + +The application must use only one of the two +initialization sequences: +@code{@value{DIRPREFIX}initialize_executive} or +@code{@value{DIRPREFIX}initialize_executive_early} and +@code{@value{DIRPREFIX}initialize_executive_late}. + +@page +@subsection INITIALIZE_EXECUTIVE_LATE - Complete Initialization and Start Multitasking + +@cindex initialize RTEMS +@cindex start multitasking + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_initialize_executive_late +@example +void rtems_initialize_executive_late( + rtems_interrupt_level bsp_level +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Initialize_Executive_Late( + BSP_Level : in RTEMS.ISR_Level +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive is called after the +@code{@value{DIRPREFIX}initialize_executive_early} +directive has been called to complete +the RTEMS initialization sequence and initiate multitasking. +The interrupt level returned by the +@code{@value{DIRPREFIX}initialize_executive_early} +directive should be in bsp_level and this value is restored as +part of this directive returning to the caller after the +@code{@value{DIRPREFIX}shutdown_executive} +directive is invoked. + +@subheading NOTES: + +This directive MUST be the second RTEMS directive +called and it DOES NOT RETURN to the caller until the +@code{@value{DIRPREFIX}shutdown_executive} is invoked. + +This directive causes all nodes in the system to +verify that certain configuration parameters are the same as +those of the local node. If an inconsistency is detected, then +a fatal error is generated. + +The application must use only one of the two +initialization sequences: +@code{@value{DIRPREFIX}initialize_executive} or +@code{@value{DIRPREFIX}initialize_executive_early} and +@code{@value{DIRPREFIX}initialize_executive_late}. + + + +@page +@subsection SHUTDOWN_EXECUTIVE - Shutdown RTEMS + +@cindex shutdown RTEMS + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_shutdown_executive +@example +void rtems_shutdown_executive( + rtems_unsigned32 result +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Shutdown_Executive( + result : in RTEMS.Unsigned32 +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive is called when the application wishes +to shutdown RTEMS and return control to the board support +package. The board support package resumes execution at the +code immediately following the invocation of the +@code{@value{DIRPREFIX}initialize_executive} directive. + +@subheading NOTES: + +This directive MUST be the last RTEMS directive +invoked by an application and it DOES NOT RETURN to the caller. + +This directive should not be invoked until the +executive has successfully completed initialization. diff --git a/doc/user/intr.t b/doc/user/intr.t new file mode 100644 index 0000000000..e9efbbd0c8 --- /dev/null +++ b/doc/user/intr.t @@ -0,0 +1,469 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Interrupt Manager + +@section Introduction + +Any real-time executive must provide a mechanism for +quick response to externally generated interrupts to satisfy the +critical time constraints of the application. The interrupt +manager provides this mechanism for RTEMS. This manager permits +quick interrupt response times by providing the critical ability +to alter task execution which allows a task to be preempted upon +exit from an ISR. The interrupt manager includes the following +directive: + +@itemize @bullet +@item @code{@value{DIRPREFIX}interrupt_catch} - Establish an ISR +@item @code{@value{DIRPREFIX}interrupt_disable} - Disable Interrupts +@item @code{@value{DIRPREFIX}interrupt_enable} - Enable Interrupts +@item @code{@value{DIRPREFIX}interrupt_flash} - Flash Interrupt +@item @code{@value{DIRPREFIX}interrupt_is_in_progress} - Is an ISR in Progress +@end itemize + +@section Background + +@subsection Processing an Interrupt + +@cindex interrupt processing + +The interrupt manager allows the application to +connect a function to a hardware interrupt vector. When an +interrupt occurs, the processor will automatically vector to +RTEMS. RTEMS saves and restores all registers which are not +preserved by the normal @value{LANGUAGE} calling convention +for the target +processor and invokes the user's ISR. The user's ISR is +responsible for processing the interrupt, clearing the interrupt +if necessary, and device specific manipulation. + +@findex rtems_vector_number + +The @code{@value{DIRPREFIX}interrupt_catch} +directive connects a procedure to +an interrupt vector. The vector number is managed using +the @code{@value{DIRPREFIX}vector_number} data type. + +The interrupt service routine is assumed +to abide by these conventions and have a prototype similar to +the following: + +@ifset is-C +@findex rtems_isr + +@example +rtems_isr user_isr( + rtems_vector_number vector +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_ISR ( + vector : in RTEMS.Vector_Number +); +@end example +@end ifset + +The vector number argument is provided by RTEMS to +allow the application to identify the interrupt source. This +could be used to allow a single routine to service interrupts +from multiple instances of the same device. For example, a +single routine could service interrupts from multiple serial +ports and use the vector number to identify which port requires +servicing. + +To minimize the masking of lower or equal priority +level interrupts, the ISR should perform the minimum actions +required to service the interrupt. Other non-essential actions +should be handled by application tasks. Once the user's ISR has +completed, it returns control to the RTEMS interrupt manager +which will perform task dispatching and restore the registers +saved before the ISR was invoked. + +The RTEMS interrupt manager guarantees that proper +task scheduling and dispatching are performed at the conclusion +of an ISR. A system call made by the ISR may have readied a +task of higher priority than the interrupted task. Therefore, +when the ISR completes, the postponed dispatch processing must +be performed. No dispatch processing is performed as part of +directives which have been invoked by an ISR. + +Applications must adhere to the following rule if +proper task scheduling and dispatching is to be performed: + +@itemize @b{ } + +@item @b{The interrupt manager must be used for all ISRs which +may be interrupted by the highest priority ISR which invokes an +RTEMS directive.} + +@end itemize + +Consider a processor which allows a numerically low +interrupt level to interrupt a numerically greater interrupt +level. In this example, if an RTEMS directive is used in a +level 4 ISR, then all ISRs which execute at levels 0 through 4 +must use the interrupt manager. + +Interrupts are nested whenever an interrupt occurs +during the execution of another ISR. RTEMS supports efficient +interrupt nesting by allowing the nested ISRs to terminate +without performing any dispatch processing. Only when the +outermost ISR terminates will the postponed dispatching occur. + +@subsection RTEMS Interrupt Levels + +@cindex interrupt levels + +Many processors support multiple interrupt levels or +priorities. The exact number of interrupt levels is processor +dependent. RTEMS internally supports 256 interrupt levels which +are mapped to the processor's interrupt levels. For specific +information on the mapping between RTEMS and the target +processor's interrupt levels, refer to the Interrupt Processing +chapter of the Applications Supplement document for a specific +target processor. + +@subsection Disabling of Interrupts by RTEMS + +@cindex disabling interrupts + +During the execution of directive calls, critical +sections of code may be executed. When these sections are +encountered, RTEMS disables all maskable interrupts before the +execution of the section and restores them to the previous level +upon completion of the section. RTEMS has been optimized to +insure that interrupts are disabled for a minimum length of +time. The maximum length of time interrupts are disabled by +RTEMS is processor dependent and is detailed in the Timing +Specification chapter of the Applications Supplement document +for a specific target processor. + +Non-maskable interrupts (NMI) cannot be disabled, and +ISRs which execute at this level MUST NEVER issue RTEMS system +calls. If a directive is invoked, unpredictable results may +occur due to the inability of RTEMS to protect its critical +sections. However, ISRs that make no system calls may safely +execute as non-maskable interrupts. + +@section Operations + +@subsection Establishing an ISR + +The @code{@value{DIRPREFIX}interrupt_catch} +directive establishes an ISR for +the system. The address of the ISR and its associated CPU +vector number are specified to this directive. This directive +installs the RTEMS interrupt wrapper in the processor's +Interrupt Vector Table and the address of the user's ISR in the +RTEMS' Vector Table. This directive returns the previous +contents of the specified vector in the RTEMS' Vector Table. + +@subsection Directives Allowed from an ISR + +Using the interrupt manager insures that RTEMS knows +when a directive is being called from an ISR. The ISR may then +use system calls to synchronize itself with an application task. +The synchronization may involve messages, events or signals +being passed by the ISR to the desired task. Directives invoked +by an ISR must operate only on objects which reside on the local +node. The following is a list of RTEMS system calls that may be +made from an ISR: + +@itemize @bullet +@item Task Management + +@itemize - +@item task_get_note, task_set_note, task_suspend, task_resume +@end itemize + +@item Clock Management + +@itemize - +@item clock_get, clock_tick +@end itemize + +@item Message, Event, and Signal Management + +@itemize - +@item message_queue_send, message_queue_urgent +@item event_send +@item signal_send +@end itemize + +@item Semaphore Management + +@itemize - +@item semaphore_release +@end itemize + +@item Dual-Ported Memory Management + +@itemize - +@item port_external_to_internal, port_internal_to_external +@end itemize + +@item IO Management + +@itemize - +@item io_initialize, io_open, io_close, io_read, io_write, io_control +@end itemize + +@item Fatal Error Management + +@itemize - +@item fatal_error_occurred +@end itemize + +@item Multiprocessing + +@itemize - +@item multiprocessing_announce +@end itemize +@end itemize + +@section Directives + +This section details the interrupt manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection INTERRUPT_CATCH - Establish an ISR + +@cindex establish an ISR +@cindex install an ISR + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_interrupt_catch +@example +rtems_status_code rtems_interrupt_catch( + rtems_isr_entry new_isr_handler, + rtems_vector_number vector, + rtems_isr_entry *old_isr_handler +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Interrupt_Catch ( + New_ISR_handler : in RTEMS.Address; + Vector : in RTEMS.Vector_Number; + Old_ISR_Handler : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - ISR established successfully@* +@code{@value{RPREFIX}INVALID_NUMBER} - illegal vector number@* +@code{@value{RPREFIX}INVALID_ADDRESS} - illegal ISR entry point or invalid @code{old_isr_handler} + +@subheading DESCRIPTION: + +This directive establishes an interrupt service +routine (ISR) for the specified interrupt vector number. The +@code{new_isr_handler} parameter specifies the entry point of the ISR. +The entry point of the previous ISR for the specified vector is +returned in @code{old_isr_handler}. + +To release an interrupt vector, pass the old handler's address obtained +when the vector was first capture. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + +@c +@c +@c +@page +@subsection INTERRUPT_DISABLE - Disable Interrupts + +@cindex disable interrupts + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_interrupt_disable +@example +void rtems_interrupt_disable( + rtems_interrupt_level level +); + +/* this is implemented as a macro and sets level as a side-effect */ +@end example +@end ifset + +@ifset is-Ada +@example +function Interrupt_Disable +return RTEMS.ISR_Level; +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive disables all maskable interrupts and returns +the previous @code{level}. A later invocation of the +@code{@value{DIRPREFIX}interrupt_enable} directive should be used to +restore the interrupt level. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + +@ifset is-C +@b{This directive is implemented as a macro which modifies the @code{level} +parameter.} +@end ifset + +@c +@c +@c +@page +@subsection INTERRUPT_ENABLE - Enable Interrupts + +@cindex enable interrupts + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_interrupt_enable +@example +void rtems_interrupt_enable( + rtems_interrupt_level level +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Interrupt_Enable ( + Level : in RTEMS.ISR_Level +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive enables maskable interrupts to the @code{level} +which was returned by a previous call to +@code{@value{DIRPREFIX}interrupt_disable}. +Immediately prior to invoking this directive, maskable interrupts should +be disabled by a call to @code{@value{DIRPREFIX}interrupt_disable} +and will be enabled when this directive returns to the caller. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + + +@c +@c +@c +@page +@subsection INTERRUPT_FLASH - Flash Interrupts + +@cindex flash interrupts + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_interrupt_flash +@example +void rtems_interrupt_flash( + rtems_interrupt_level level +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Interrupt_Flash ( + Level : in RTEMS.ISR_Level +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive temporarily enables maskable interrupts to the @code{level} +which was returned by a previous call to +@code{@value{DIRPREFIX}interrupt_disable}. +Immediately prior to invoking this directive, maskable interrupts should +be disabled by a call to @code{@value{DIRPREFIX}interrupt_disable} +and will be redisabled when this directive returns to the caller. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + +@c +@c +@c +@page +@subsection INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress + +@cindex is interrupt in progress + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_interrupt_is_in_progress +@example +rtems_boolean rtems_interrupt_is_in_progress( void ); +@end example +@end ifset + +@ifset is-Ada +@example +function Interrupt_Is_In_Progress +return RTEMS.Boolean; +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive returns @code{TRUE} if the processor is currently +servicing an interrupt and @code{FALSE} otherwise. A return value +of @code{TRUE} indicates that the caller is an interrupt service +routine, @b{NOT} a task. The directives available to an interrupt +service routine are restricted. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + diff --git a/doc/user/io.t b/doc/user/io.t new file mode 100644 index 0000000000..a22ef09a8f --- /dev/null +++ b/doc/user/io.t @@ -0,0 +1,741 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter I/O Manager + +@cindex device drivers +@cindex IO Manager + +@section Introduction + +The input/output interface manager provides a +well-defined mechanism for accessing device drivers and a +structured methodology for organizing device drivers. The +directives provided by the I/O manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}io_initialize} - Initialize a device driver +@item @code{@value{DIRPREFIX}io_register_name} - Register a device name +@item @code{@value{DIRPREFIX}io_lookup_name} - Look up a device name +@item @code{@value{DIRPREFIX}io_open} - Open a device +@item @code{@value{DIRPREFIX}io_close} - Close a device +@item @code{@value{DIRPREFIX}io_read} - Read from a device +@item @code{@value{DIRPREFIX}io_write} - Write to a device +@item @code{@value{DIRPREFIX}io_control} - Special device services +@end itemize + +@section Background + +@subsection Device Driver Table + +@cindex Device Driver Table + +Each application utilizing the RTEMS I/O manager must specify the +address of a Device Driver Table in its Configuration Table. This table +contains each device driver's entry points that is to be initialised by +RTEMS during initialization. Each device driver may contain the +following entry points: + +@itemize @bullet +@item Initialization +@item Open +@item Close +@item Read +@item Write +@item Control +@end itemize + +If the device driver does not support a particular +entry point, then that entry in the Configuration Table should +be NULL. RTEMS will return +@code{@value{RPREFIX}SUCCESSFUL} as the executive's and +zero (0) as the device driver's return code for these device +driver entry points. + +Applications can register and unregister drivers with the RTEMS I/O +manager avoiding the need to have all drivers statically defined and +linked into this table. + +The @file{confdefs.h} entry @code{CONFIGURE_MAXIMUM_DRIVERS} configures +the number of driver slots available to the application. + +@subsection Major and Minor Device Numbers + +@cindex major device number +@cindex minor device number + +Each call to the I/O manager must provide a device's +major and minor numbers as arguments. The major number is the +index of the requested driver's entry points in the Device +Driver Table, and is used to select a specific device driver. +The exact usage of the minor number is driver specific, but is +commonly used to distinguish between a number of devices +controlled by the same driver. + +@findex rtems_device_major_number +@findex rtems_device_minor_number + +The data types @code{@value{DIRPREFIX}device_major_number} and +@code{@value{DIRPREFIX}device_minor_number} are used to +manipulate device major and minor numbers, respectively. + +@subsection Device Names + +@cindex device names + +The I/O Manager provides facilities to associate a +name with a particular device. Directives are provided to +register the name of a device and to look up the major/minor +number pair associated with a device name. + +@subsection Device Driver Environment + +Application developers, as well as device driver +developers, must be aware of the following regarding the RTEMS +I/O Manager: + +@itemize @bullet +@item A device driver routine executes in the context of the +invoking task. Thus if the driver blocks, the invoking task +blocks. + +@item The device driver is free to change the modes of the +invoking task, although the driver should restore them to their +original values. + +@item Device drivers may be invoked from ISRs. + +@item Only local device drivers are accessible through the I/O +manager. + +@item A device driver routine may invoke all other RTEMS +directives, including I/O directives, on both local and global +objects. + +@end itemize + +Although the RTEMS I/O manager provides a framework +for device drivers, it makes no assumptions regarding the +construction or operation of a device driver. + +@subsection Runtime Driver Registration + +@cindex runtime driver registration + +Board support package and application developers can select wether a +device driver is statically entered into the default device table or +registered at runtime. + +Dynamic registration helps applications where: + +@enumerate +@item The BSP and kernel libraries are common to a range of applications +for a specific target platform. An application may be built upon a +common library with all drivers. The application selects and registers +the drivers. Uniform driver name lookup protects the application. +@item The type and range of drivers may vary as the application probes a +bus during initialization. +@item Support for hot swap bus system such as Compact PCI. +@item Support for runtime loadable driver modules. +@end enumerate + +@subsection Device Driver Interface + +@cindex device driver interface + +When an application invokes an I/O manager directive, +RTEMS determines which device driver entry point must be +invoked. The information passed by the application to RTEMS is +then passed to the correct device driver entry point. RTEMS +will invoke each device driver entry point assuming it is +compatible with the following prototype: + +@ifset is-C +@example +rtems_device_driver io_entry( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument_block +); +@end example +@end ifset + +@ifset is-Ada +@example +function IO_Entry ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Major_Number; + Argument_Block : in RTEMS.Address +) return RTEMS.Status_Code; +@end example +@end ifset + +The format and contents of the parameter block are +device driver and entry point dependent. + +It is recommended that a device driver avoid +generating error codes which conflict with those used by +application components. A common technique used to generate +driver specific error codes is to make the most significant part +of the status indicate a driver specific code. + +@subsection Device Driver Initialization + +RTEMS automatically initializes all device drivers +when multitasking is initiated via the +@code{@value{DIRPREFIX}initialize_executive} +directive. RTEMS initializes the device drivers by invoking +each device driver initialization entry point with the following +parameters: + +@table @asis +@item major +the major device number for this device driver. + +@item minor +zero. + +@item argument_block +will point to the Configuration Table. + +@end table + +The returned status will be ignored by RTEMS. If the driver +cannot successfully initialize the device, then it should invoke +the fatal_error_occurred directive. + +@section Operations + +@subsection Register and Lookup Name + +The @code{@value{DIRPREFIX}io_register} directive associates a name with the +specified device (i.e. major/minor number pair). Device names +are typically registered as part of the device driver +initialization sequence. The @code{@value{DIRPREFIX}io_lookup} +directive is used to +determine the major/minor number pair associated with the +specified device name. The use of these directives frees the +application from being dependent on the arbitrary assignment of +major numbers in a particular application. No device naming +conventions are dictated by RTEMS. + +@subsection Accessing an Device Driver + +The I/O manager provides directives which enable the +application program to utilize device drivers in a standard +manner. There is a direct correlation between the RTEMS I/O +manager directives +@code{@value{DIRPREFIX}io_initialize}, +@code{@value{DIRPREFIX}io_open}, +@code{@value{DIRPREFIX}io_close}, +@code{@value{DIRPREFIX}io_read}, +@code{@value{DIRPREFIX}io_write}, and +@code{@value{DIRPREFIX}io_control} +and the underlying device driver entry points. + +@section Directives + +This section details the I/O manager's directives. A +subsection is dedicated to each of this manager's directives and +describes the calling sequence, related constants, usage, and +status codes. + +@c +@c +@c +@page +@subsection IO_REGISTER_DRIVER - Register a device driver + +@cindex register a device driver + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_register_driver +@example +rtems_status_code rtems_io_register_driver( + rtems_device_major_number major, + rtems_driver_address_table *driver_table, + rtems_device_major_number *registered_major +); +@end example +@end ifset + +@ifset is-Ada +@example +No Ada implementation. +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully registered@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number@* +@code{@value{RPREFIX}TOO_MANY} - no available major device table slot@* +@code{@value{RPREFIX}RESOURCE_IN_USE} - major device number entry in use + +@subheading DESCRIPTION: + +This directive attempts to add a new device driver to the Device Driver +Table. The user can specify a specific major device number via the +directive's @code{major} parameter, or let the registration routine find +the next available major device number by specifing a major number of +@code{0}. The selected major device number is returned via the +@code{registered_major} directive parameter. The directive automatically +allocation major device numbers from the highest value down. + +This directive automatically invokes the IO_INITIALIZE directive if +the driver address table has an initialization and open entry. + +The directive returns @value{RPREFIX}TOO_MANY if Device Driver Table is +full, and @value{RPREFIX}RESOURCE_IN_USE if a specific major device +number is requested and it is already in use. + +@subheading NOTES: + +The Device Driver Table size is specified in the Configuration Table +condiguration. This needs to be set to maximum size the application +requires. + + +@c +@c +@c +@page +@subsection IO_UNREGISTER_DRIVER - Unregister a device driver + +@cindex unregister a device driver + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_unregister_driver +@example +rtems_status_code rtems_io_register_driver( + rtems_device_major_number major +); +@end example +@end ifset + +@ifset is-Ada +@example +No Ada implementation. +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully registered@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive removes a device driver from the Device Driver Table. + +@subheading NOTES: + +Currently no specific checks are made and the driver is not closed. + + +@c +@c +@c +@page +@subsection IO_INITIALIZE - Initialize a device driver + +@cindex initialize a device driver + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_initialize +@example +rtems_status_code rtems_io_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Initialize ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver initialization +routine specified in the Device Driver Table for this major +number. This directive is automatically invoked for each device +driver when multitasking is initiated via the +initialize_executive directive. + +A device driver initialization module is responsible +for initializing all hardware and data structures associated +with a device. If necessary, it can allocate memory to be used +during other operations. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +initialized. + +@c +@c +@c +@page +@subsection IO_REGISTER_NAME - Register a device + +@cindex register device + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_register_name +@example +rtems_status_code rtems_io_register_name( + char *name, + rtems_device_major_number major, + rtems_device_minor_number minor +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Register_Name ( + Name : in String; + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}TOO_MANY} - too many devices registered + +@subheading DESCRIPTION: + +This directive associates name with the specified +major/minor number pair. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection IO_LOOKUP_NAME - Lookup a device + +@cindex lookup device major and minor number + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_lookup_name +@example +rtems_status_code rtems_io_lookup_name( + const char *name, + rtems_driver_name_t *device_info +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Lookup_Name ( + Name : in String; + Device_Info : out RTEMS.Driver_Name_t_Pointer; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}UNSATISFIED} - name not registered + +@subheading DESCRIPTION: + +This directive returns the major/minor number pair +associated with the given device name in @code{device_info}. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection IO_OPEN - Open a device + +@cindex open a devive + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_open +@example +rtems_status_code rtems_io_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Open ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver open routine +specified in the Device Driver Table for this major number. The +open entry point is commonly used by device drivers to provide +exclusive access to a device. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +invoked. + +@c +@c +@c +@page +@subsection IO_CLOSE - Close a device + +@cindex close a device + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_close +@example +rtems_status_code rtems_io_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Close ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver close routine +specified in the Device Driver Table for this major number. The +close entry point is commonly used by device drivers to +relinquish exclusive access to a device. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +invoked. + +@c +@c +@c +@page +@subsection IO_READ - Read from a device + +@cindex read from a device + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_read +@example +rtems_status_code rtems_io_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Read ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver read routine +specified in the Device Driver Table for this major number. +Read operations typically require a buffer address as part of +the argument parameter block. The contents of this buffer will +be replaced with data from the device. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +invoked. + +@c +@c +@c +@page +@subsection IO_WRITE - Write to a device + +@cindex write to a device + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_write +@example +rtems_status_code rtems_io_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Write ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver write routine +specified in the Device Driver Table for this major number. +Write operations typically require a buffer address as part of +the argument parameter block. The contents of this buffer will +be sent to the device. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +invoked. + +@c +@c +@c +@page +@subsection IO_CONTROL - Special device services + +@cindex special device services +@cindex IO Control + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_io_control +@example +rtems_status_code rtems_io_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure IO_Control ( + Major : in RTEMS.Device_Major_Number; + Minor : in RTEMS.Device_Minor_Number; + Argument : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - successfully initialized@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid major device number + +@subheading DESCRIPTION: + +This directive calls the device driver I/O control +routine specified in the Device Driver Table for this major +number. The exact functionality of the driver entry called by +this directive is driver dependent. It should not be assumed +that the control entries of two device drivers are compatible. +For example, an RS-232 driver I/O control operation may change +the baud rate of a serial line, while an I/O control operation +for a floppy disk driver may cause a seek operation. + +@subheading NOTES: + +This directive may or may not cause the calling task +to be preempted. This is dependent on the device driver being +invoked. + + + diff --git a/doc/user/mp.t b/doc/user/mp.t new file mode 100644 index 0000000000..7114151593 --- /dev/null +++ b/doc/user/mp.t @@ -0,0 +1,621 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Multiprocessing Manager + +@cindex multiprocessing + +@section Introduction + +In multiprocessor real-time systems, new +requirements, such as sharing data and global resources between +processors, are introduced. This requires an efficient and +reliable communications vehicle which allows all processors to +communicate with each other as necessary. In addition, the +ramifications of multiple processors affect each and every +characteristic of a real-time system, almost always making them +more complicated. + +RTEMS addresses these issues by providing simple and +flexible real-time multiprocessing capabilities. The executive +easily lends itself to both tightly-coupled and loosely-coupled +configurations of the target system hardware. In addition, +RTEMS supports systems composed of both homogeneous and +heterogeneous mixtures of processors and target boards. + +A major design goal of the RTEMS executive was to +transcend the physical boundaries of the target hardware +configuration. This goal is achieved by presenting the +application software with a logical view of the target system +where the boundaries between processor nodes are transparent. +As a result, the application developer may designate objects +such as tasks, queues, events, signals, semaphores, and memory +blocks as global objects. These global objects may then be +accessed by any task regardless of the physical location of the +object and the accessing task. RTEMS automatically determines +that the object being accessed resides on another processor and +performs the actions required to access the desired object. +Simply stated, RTEMS allows the entire system, both hardware and +software, to be viewed logically as a single system. + +@section Background + +@cindex multiprocessing topologies + +RTEMS makes no assumptions regarding the connection +media or topology of a multiprocessor system. The tasks which +compose a particular application can be spread among as many +processors as needed to satisfy the application's timing +requirements. The application tasks can interact using a subset +of the RTEMS directives as if they were on the same processor. +These directives allow application tasks to exchange data, +communicate, and synchronize regardless of which processor they +reside upon. + +The RTEMS multiprocessor execution model is multiple +instruction streams with multiple data streams (MIMD). This +execution model has each of the processors executing code +independent of the other processors. Because of this +parallelism, the application designer can more easily guarantee +deterministic behavior. + +By supporting heterogeneous environments, RTEMS +allows the systems designer to select the most efficient +processor for each subsystem of the application. Configuring +RTEMS for a heterogeneous environment is no more difficult than +for a homogeneous one. In keeping with RTEMS philosophy of +providing transparent physical node boundaries, the minimal +heterogeneous processing required is isolated in the MPCI layer. + +@subsection Nodes + +@cindex nodes, definition + +A processor in a RTEMS system is referred to as a +node. Each node is assigned a unique non-zero node number by +the application designer. RTEMS assumes that node numbers are +assigned consecutively from one to the @code{maximum_nodes} +configuration parameter. The node +number, node, and the maximum number of nodes, maximum_nodes, in +a system are found in the Multiprocessor Configuration Table. +The maximum_nodes field and the number of global objects, +maximum_global_objects, is required to be the same on all nodes +in a system. + +The node number is used by RTEMS to identify each +node when performing remote operations. Thus, the +Multiprocessor Communications Interface Layer (MPCI) must be +able to route messages based on the node number. + +@subsection Global Objects + +@cindex global objects, definition + +All RTEMS objects which are created with the GLOBAL +attribute will be known on all other nodes. Global objects can +be referenced from any node in the system, although certain +directive specific restrictions (e.g. one cannot delete a remote +object) may apply. A task does not have to be global to perform +operations involving remote objects. The maximum number of +global objects is the system is user configurable and can be +found in the maximum_global_objects field in the Multiprocessor +Configuration Table. The distribution of tasks to processors is +performed during the application design phase. Dynamic task +relocation is not supported by RTEMS. + +@subsection Global Object Table + +@cindex global objects table + +RTEMS maintains two tables containing object +information on every node in a multiprocessor system: a local +object table and a global object table. The local object table +on each node is unique and contains information for all objects +created on this node whether those objects are local or global. +The global object table contains information regarding all +global objects in the system and, consequently, is the same on +every node. + +Since each node must maintain an identical copy of +the global object table, the maximum number of entries in each +copy of the table must be the same. The maximum number of +entries in each copy is determined by the +maximum_global_objects parameter in the Multiprocessor +Configuration Table. This parameter, as well as the +maximum_nodes parameter, is required to be the same on all +nodes. To maintain consistency among the table copies, every +node in the system must be informed of the creation or deletion +of a global object. + +@subsection Remote Operations + +@cindex MPCI and remote operations + +When an application performs an operation on a remote +global object, RTEMS must generate a Remote Request (RQ) message +and send it to the appropriate node. After completing the +requested operation, the remote node will build a Remote +Response (RR) message and send it to the originating node. +Messages generated as a side-effect of a directive (such as +deleting a global task) are known as Remote Processes (RP) and +do not require the receiving node to respond. + +Other than taking slightly longer to execute +directives on remote objects, the application is unaware of the +location of the objects it acts upon. The exact amount of +overhead required for a remote operation is dependent on the +media connecting the nodes and, to a lesser degree, on the +efficiency of the user-provided MPCI routines. + +The following shows the typical transaction sequence +during a remote application: + +@enumerate + +@item The application issues a directive accessing a +remote global object. + +@item RTEMS determines the node on which the object +resides. + +@item RTEMS calls the user-provided MPCI routine +GET_PACKET to obtain a packet in which to build a RQ message. + +@item After building a message packet, RTEMS calls the +user-provided MPCI routine SEND_PACKET to transmit the packet to +the node on which the object resides (referred to as the +destination node). + +@item The calling task is blocked until the RR message +arrives, and control of the processor is transferred to another +task. + +@item The MPCI layer on the destination node senses the +arrival of a packet (commonly in an ISR), and calls the +@code{@value{DIRPREFIX}multiprocessing_announce} +directive. This directive readies the Multiprocessing Server. + +@item The Multiprocessing Server calls the user-provided +MPCI routine RECEIVE_PACKET, performs the requested operation, +builds an RR message, and returns it to the originating node. + +@item The MPCI layer on the originating node senses the +arrival of a packet (typically via an interrupt), and calls the RTEMS +@code{@value{DIRPREFIX}multiprocessing_announce} directive. This directive +readies the Multiprocessing Server. + +@item The Multiprocessing Server calls the user-provided +MPCI routine RECEIVE_PACKET, readies the original requesting +task, and blocks until another packet arrives. Control is +transferred to the original task which then completes processing +of the directive. + +@end enumerate + +If an uncorrectable error occurs in the user-provided +MPCI layer, the fatal error handler should be invoked. RTEMS +assumes the reliable transmission and reception of messages by +the MPCI and makes no attempt to detect or correct errors. + +@subsection Proxies + +@cindex proxy, definition + +A proxy is an RTEMS data structure which resides on a +remote node and is used to represent a task which must block as +part of a remote operation. This action can occur as part of the +@code{@value{DIRPREFIX}semaphore_obtain} and +@code{@value{DIRPREFIX}message_queue_receive} directives. If the +object were local, the task's control block would be available +for modification to indicate it was blocking on a message queue +or semaphore. However, the task's control block resides only on +the same node as the task. As a result, the remote node must +allocate a proxy to represent the task until it can be readied. + +The maximum number of proxies is defined in the +Multiprocessor Configuration Table. Each node in a +multiprocessor system may require a different number of proxies +to be configured. The distribution of proxy control blocks is +application dependent and is different from the distribution of +tasks. + +@subsection Multiprocessor Configuration Table + +The Multiprocessor Configuration Table contains +information needed by RTEMS when used in a multiprocessor +system. This table is discussed in detail in the section +Multiprocessor Configuration Table of the Configuring a System +chapter. + +@section Multiprocessor Communications Interface Layer + +The Multiprocessor Communications Interface Layer +(MPCI) is a set of user-provided procedures which enable the +nodes in a multiprocessor system to communicate with one +another. These routines are invoked by RTEMS at various times +in the preparation and processing of remote requests. +Interrupts are enabled when an MPCI procedure is invoked. It is +assumed that if the execution mode and/or interrupt level are +altered by the MPCI layer, that they will be restored prior to +returning to RTEMS. + +@cindex MPCI, definition + +The MPCI layer is responsible for managing a pool of +buffers called packets and for sending these packets between +system nodes. Packet buffers contain the messages sent between +the nodes. Typically, the MPCI layer will encapsulate the +packet within an envelope which contains the information needed +by the MPCI layer. The number of packets available is dependent +on the MPCI layer implementation. + +@cindex MPCI entry points + +The entry points to the routines in the user's MPCI +layer should be placed in the Multiprocessor Communications +Interface Table. The user must provide entry points for each of +the following table entries in a multiprocessor system: + +@itemize @bullet +@item initialization initialize the MPCI +@item get_packet obtain a packet buffer +@item return_packet return a packet buffer +@item send_packet send a packet to another node +@item receive_packet called to get an arrived packet +@end itemize + +A packet is sent by RTEMS in each of the following situations: + +@itemize @bullet +@item an RQ is generated on an originating node; +@item an RR is generated on a destination node; +@item a global object is created; +@item a global object is deleted; +@item a local task blocked on a remote object is deleted; +@item during system initialization to check for system consistency. +@end itemize + +If the target hardware supports it, the arrival of a +packet at a node may generate an interrupt. Otherwise, the +real-time clock ISR can check for the arrival of a packet. In +any case, the +@code{@value{DIRPREFIX}multiprocessing_announce} directive must be called +to announce the arrival of a packet. After exiting the ISR, +control will be passed to the Multiprocessing Server to process +the packet. The Multiprocessing Server will call the get_packet +entry to obtain a packet buffer and the receive_entry entry to +copy the message into the buffer obtained. + +@subsection INITIALIZATION + +The INITIALIZATION component of the user-provided +MPCI layer is called as part of the @code{@value{DIRPREFIX}initialize_executive} +directive to initialize the MPCI layer and associated hardware. +It is invoked immediately after all of the device drivers have +been initialized. This component should be adhere to the +following prototype: + +@ifset is-C +@findex rtems_mpci_entry +@example +@group +rtems_mpci_entry user_mpci_initialization( + rtems_configuration_table *configuration +); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_MPCI_Initialization ( + Configuration : in RTEMS.Configuration_Table_Pointer +); +@end example +@end ifset + +where configuration is the address of the user's +Configuration Table. Operations on global objects cannot be +performed until this component is invoked. The INITIALIZATION +component is invoked only once in the life of any system. If +the MPCI layer cannot be successfully initialized, the fatal +error manager should be invoked by this routine. + +One of the primary functions of the MPCI layer is to +provide the executive with packet buffers. The INITIALIZATION +routine must create and initialize a pool of packet buffers. +There must be enough packet buffers so RTEMS can obtain one +whenever needed. + +@subsection GET_PACKET + +The GET_PACKET component of the user-provided MPCI +layer is called when RTEMS must obtain a packet buffer to send +or broadcast a message. This component should be adhere to the +following prototype: + +@ifset is-C +@example +@group +rtems_mpci_entry user_mpci_get_packet( + rtems_packet_prefix **packet +); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_MPCI_Get_Packet ( + Packet : access RTEMS.Packet_Prefix_Pointer +); +@end example +@end ifset + +where packet is the address of a pointer to a packet. +This routine always succeeds and, upon return, packet will +contain the address of a packet. If for any reason, a packet +cannot be successfully obtained, then the fatal error manager +should be invoked. + +RTEMS has been optimized to avoid the need for +obtaining a packet each time a message is sent or broadcast. +For example, RTEMS sends response messages (RR) back to the +originator in the same packet in which the request message (RQ) +arrived. + +@subsection RETURN_PACKET + +The RETURN_PACKET component of the user-provided MPCI +layer is called when RTEMS needs to release a packet to the free +packet buffer pool. This component should be adhere to the +following prototype: + +@ifset is-C +@example +@group +rtems_mpci_entry user_mpci_return_packet( + rtems_packet_prefix *packet +); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_MPCI_Return_Packet ( + Packet : in RTEMS.Packet_Prefix_Pointer +); +@end example +@end ifset + +where packet is the address of a packet. If the +packet cannot be successfully returned, the fatal error manager +should be invoked. + +@subsection RECEIVE_PACKET + +The RECEIVE_PACKET component of the user-provided +MPCI layer is called when RTEMS needs to obtain a packet which +has previously arrived. This component should be adhere to the +following prototype: + +@ifset is-C +@example +@group +rtems_mpci_entry user_mpci_receive_packet( + rtems_packet_prefix **packet +); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_MPCI_Receive_Packet ( + Packet : access RTEMS.Packet_Prefix_Pointer +); +@end example +@end ifset + +where packet is a pointer to the address of a packet +to place the message from another node. If a message is +available, then packet will contain the address of the message +from another node. If no messages are available, this entry +packet should contain NULL. + +@subsection SEND_PACKET + +The SEND_PACKET component of the user-provided MPCI +layer is called when RTEMS needs to send a packet containing a +message to another node. This component should be adhere to the +following prototype: + +@ifset is-C +@example +@group +rtems_mpci_entry user_mpci_send_packet( + rtems_unsigned32 node, + rtems_packet_prefix **packet +); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_MPCI_Send_Packet ( + Node : in RTEMS.Unsigned32; + Packet : access RTEMS.Packet_Prefix_Pointer +); +@end example +@end ifset + +where node is the node number of the destination and packet is the +address of a packet which containing a message. If the packet cannot +be successfully sent, the fatal error manager should be invoked. + +If node is set to zero, the packet is to be +broadcasted to all other nodes in the system. Although some +MPCI layers will be built upon hardware which support a +broadcast mechanism, others may be required to generate a copy +of the packet for each node in the system. + +@c XXX packet_prefix structure needs to be defined in this document +Many MPCI layers use the @code{packet_length} field of the +@code{@value{DIRPREFIX}packet_prefix} portion +of the packet to avoid sending unnecessary data. This is especially +useful if the media connecting the nodes is relatively slow. + +The to_convert field of the MP_packet_prefix portion of the packet indicates +how much of the packet (in @code{@value{DIRPREFIX}unsigned32}'s) may require +conversion in a heterogeneous system. + +@subsection Supporting Heterogeneous Environments + +@cindex heterogeneous multiprocessing + +Developing an MPCI layer for a heterogeneous system +requires a thorough understanding of the differences between the +processors which comprise the system. One difficult problem is +the varying data representation schemes used by different +processor types. The most pervasive data representation problem +is the order of the bytes which compose a data entity. +Processors which place the least significant byte at the +smallest address are classified as little endian processors. +Little endian byte-ordering is shown below: + + +@example +@group ++---------------+----------------+---------------+----------------+ +| | | | | +| Byte 3 | Byte 2 | Byte 1 | Byte 0 | +| | | | | ++---------------+----------------+---------------+----------------+ +@end group +@end example + +Conversely, processors which place the most +significant byte at the smallest address are classified as big +endian processors. Big endian byte-ordering is shown below: + +@example +@group ++---------------+----------------+---------------+----------------+ +| | | | | +| Byte 0 | Byte 1 | Byte 2 | Byte 3 | +| | | | | ++---------------+----------------+---------------+----------------+ +@end group +@end example + +Unfortunately, sharing a data structure between big +endian and little endian processors requires translation into a +common endian format. An application designer typically chooses +the common endian format to minimize conversion overhead. + +Another issue in the design of shared data structures +is the alignment of data structure elements. Alignment is both +processor and compiler implementation dependent. For example, +some processors allow data elements to begin on any address +boundary, while others impose restrictions. Common restrictions +are that data elements must begin on either an even address or +on a long word boundary. Violation of these restrictions may +cause an exception or impose a performance penalty. + +Other issues which commonly impact the design of +shared data structures include the representation of floating +point numbers, bit fields, decimal data, and character strings. +In addition, the representation method for negative integers +could be one's or two's complement. These factors combine to +increase the complexity of designing and manipulating data +structures shared between processors. + +RTEMS addressed these issues in the design of the +packets used to communicate between nodes. The RTEMS packet +format is designed to allow the MPCI layer to perform all +necessary conversion without burdening the developer with the +details of the RTEMS packet format. As a result, the MPCI layer +must be aware of the following: + +@itemize @bullet +@item All packets must begin on a four byte boundary. + +@item Packets are composed of both RTEMS and application data. +All RTEMS data is treated as thirty-two (32) bit unsigned +quantities and is in the first @code{@value{RPREFIX}MINIMUM_UNSIGNED32S_TO_CONVERT} +thirty-two (32) quantities of the packet. + +@item The RTEMS data component of the packet must be in native +endian format. Endian conversion may be performed by either the +sending or receiving MPCI layer. + +@item RTEMS makes no assumptions regarding the application +data component of the packet. +@end itemize + +@section Operations + +@subsection Announcing a Packet + +The @code{@value{DIRPREFIX}multiprocessing_announce} directive is called by +the MPCI layer to inform RTEMS that a packet has arrived from +another node. This directive can be called from an interrupt +service routine or from within a polling routine. + +@section Directives + +This section details the additional directives +required to support RTEMS in a multiprocessor configuration. A +subsection is dedicated to each of this manager's directives and +describes the calling sequence, related constants, usage, and +status codes. + +@c +@c +@c +@page +@subsection MULTIPROCESSING_ANNOUNCE - Announce the arrival of a packet + +@cindex announce arrival of package + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_multiprocessing_announce +@example +void rtems_multiprocessing_announce( void ); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Multiprocessing_Announce; +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +This directive informs RTEMS that a multiprocessing +communications packet has arrived from another node. This +directive is called by the user-provided MPCI, and is only used +in multiprocessor configurations. + +@subheading NOTES: + +This directive is typically called from an ISR. + +This directive will almost certainly cause the +calling task to be preempted. + +This directive does not generate activity on remote nodes. diff --git a/doc/user/msg.t b/doc/user/msg.t new file mode 100644 index 0000000000..03d2150e3c --- /dev/null +++ b/doc/user/msg.t @@ -0,0 +1,834 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Message Manager + +@cindex messages +@cindex message queues + +@section Introduction + +The message manager provides communication and +synchronization capabilities using RTEMS message queues. The +directives provided by the message manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}message_queue_create} - Create a queue +@item @code{@value{DIRPREFIX}message_queue_ident} - Get ID of a queue +@item @code{@value{DIRPREFIX}message_queue_delete} - Delete a queue +@item @code{@value{DIRPREFIX}message_queue_send} - Put message at rear of a queue +@item @code{@value{DIRPREFIX}message_queue_urgent} - Put message at front of a queue +@item @code{@value{DIRPREFIX}message_queue_broadcast} - Broadcast N messages to a queue +@item @code{@value{DIRPREFIX}message_queue_receive} - Receive message from a queue +@item @code{@value{DIRPREFIX}message_queue_get_number_pending} - Get number of messages pending on a queue +@item @code{@value{DIRPREFIX}message_queue_flush} - Flush all messages on a queue +@end itemize + +@section Background + +@subsection Messages + +A message is a variable length buffer where +information can be stored to support communication. The length +of the message and the information stored in that message are +user-defined and can be actual data, pointer(s), or empty. + +@subsection Message Queues + +A message queue permits the passing of messages among +tasks and ISRs. Message queues can contain a variable number of +messages. Normally messages are sent to and received from the +queue in FIFO order using the @code{@value{DIRPREFIX}message_queue_send} +directive. However, the @code{@value{DIRPREFIX}message_queue_urgent} +directive can be used to place +messages at the head of a queue in LIFO order. + +Synchronization can be accomplished when a task can +wait for a message to arrive at a queue. Also, a task may poll +a queue for the arrival of a message. + +The maximum length message which can be sent is set +on a per message queue basis. + +@subsection Building a Message Queue Attribute Set + +@cindex message queue attributes + +In general, an attribute set is built by a bitwise OR +of the desired attribute components. The set of valid message +queue attributes is provided in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority +@item @code{@value{RPREFIX}LOCAL} - local message queue (default) +@item @code{@value{RPREFIX}GLOBAL} - global message queue +@end itemize + + +An attribute listed as a default is not required to +appear in the attribute list, although it is a good programming +practice to specify default attributes. If all defaults are +desired, the attribute @code{@value{RPREFIX}DEFAULT_ATTRIBUTES} +should be specified on this call. + +This example demonstrates the attribute_set parameter +needed to create a local message queue with the task priority +waiting queue discipline. The attribute_set parameter to the +@code{@value{DIRPREFIX}message_queue_create} directive could be either +@code{@value{RPREFIX}PRIORITY} or +@code{@value{RPREFIX}LOCAL @value{OR} @value{RPREFIX}PRIORITY}. +The attribute_set parameter can be set to @code{@value{RPREFIX}PRIORITY} +because @code{@value{RPREFIX}LOCAL} is the default for all created +message queues. If a similar message queue were to be known globally, then the +attribute_set parameter would be +@code{@value{RPREFIX}GLOBAL @value{OR} @value{RPREFIX}PRIORITY}. + +@subsection Building a MESSAGE_QUEUE_RECEIVE Option Set + +In general, an option is built by a bitwise OR of the +desired option components. The set of valid options for the +@code{@value{DIRPREFIX}message_queue_receive} directive are +listed in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for a message (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +An option listed as a default is not required to +appear in the option OR list, although it is a good programming +practice to specify default options. If all defaults are +desired, the option @code{@value{RPREFIX}DEFAULT_OPTIONS} should +be specified on this call. + +This example demonstrates the option parameter needed +to poll for a message to arrive. The option parameter passed to +the @code{@value{DIRPREFIX}message_queue_receive} directive should +be @code{@value{RPREFIX}NO_WAIT}. + +@section Operations + +@subsection Creating a Message Queue + +The @code{@value{DIRPREFIX}message_queue_create} directive creates a message +queue with the user-defined name. The user specifies the +maximum message size and maximum number of messages which can be +placed in the message queue at one time. The user may select +FIFO or task priority as the method for placing waiting tasks in +the task wait queue. RTEMS allocates a Queue Control Block +(QCB) from the QCB free list to maintain the newly created queue +as well as memory for the message buffer pool associated with +this message queue. RTEMS also generates a message queue ID +which is returned to the calling task. + +For GLOBAL message queues, the maximum message size +is effectively limited to the longest message which the MPCI is +capable of transmitting. + +@subsection Obtaining Message Queue IDs + +When a message queue is created, RTEMS generates a +unique message queue ID. The message queue ID may be obtained +by either of two methods. First, as the result of an invocation +of the @code{@value{DIRPREFIX}message_queue_create} directive, the +queue ID is stored in a user provided location. Second, the queue +ID may be obtained later using the @code{@value{DIRPREFIX}message_queue_ident} +directive. The queue ID is used by other message manager +directives to access this message queue. + +@subsection Receiving a Message + +The @code{@value{DIRPREFIX}message_queue_receive} directive attempts to +retrieve a message from the specified message queue. If at +least one message is in the queue, then the message is removed +from the queue, copied to the caller's message buffer, and +returned immediately along with the length of the message. When +messages are unavailable, one of the following situations +applies: + +@itemize @bullet +@item By default, the calling task will wait forever for the +message to arrive. + +@item Specifying the @code{@value{RPREFIX}NO_WAIT} option forces an immediate return +with an error status code. + +@item Specifying a timeout limits the period the task will +wait before returning with an error status. +@end itemize + +If the task waits for a message, then it is placed in +the message queue's task wait queue in either FIFO or task +priority order. All tasks waiting on a message queue are +returned an error code when the message queue is deleted. + +@subsection Sending a Message + +Messages can be sent to a queue with the +@code{@value{DIRPREFIX}message_queue_send} and +@code{@value{DIRPREFIX}message_queue_urgent} directives. These +directives work identically when tasks are waiting to receive a +message. A task is removed from the task waiting queue, +unblocked, and the message is copied to a waiting task's +message buffer. + +When no tasks are waiting at the queue, +@code{@value{DIRPREFIX}message_queue_send} places the +message at the rear of the message queue, while +@code{@value{DIRPREFIX}message_queue_urgent} places the message at the +front of the queue. The message is copied to a message buffer +from this message queue's buffer pool and then placed in the +message queue. Neither directive can successfully send a +message to a message queue which has a full queue of pending +messages. + +@subsection Broadcasting a Message + +The @code{@value{DIRPREFIX}message_queue_broadcast} directive sends the same +message to every task waiting on the specified message queue as +an atomic operation. The message is copied to each waiting +task's message buffer and each task is unblocked. The number of +tasks which were unblocked is returned to the caller. + +@subsection Deleting a Message Queue + +The @code{@value{DIRPREFIX}message_queue_delete} directive removes a message +queue from the system and frees its control block as well as the +memory associated with this message queue's message buffer pool. +A message queue can be deleted by any local task that knows the +message queue's ID. As a result of this directive, all tasks +blocked waiting to receive a message from the message queue will +be readied and returned a status code which indicates that the +message queue was deleted. Any subsequent references to the +message queue's name and ID are invalid. Any messages waiting +at the message queue are also deleted and deallocated. + +@section Directives + +This section details the message manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_CREATE - Create a queue + +@cindex create a message queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_create +@example +rtems_status_code rtems_message_queue_create( + rtems_name name, + rtems_unsigned32 count, + rtems_unsigned32 max_message_size, + rtems_attribute attribute_set, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Create ( + Name : in RTEMS.Name; + Count : in RTEMS.Unsigned32; + Max_Message_Size : in RTEMS.Unsigned32; + Attribute_Set : in RTEMS.Attribute; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - queue created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid message count@* +@code{@value{RPREFIX}INVALID_SIZE} - invalid message size@* +@code{@value{RPREFIX}TOO_MANY} - too many queues created@* +@code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured@* +@code{@value{RPREFIX}TOO_MANY} - too many global objects + +@subheading DESCRIPTION: + +This directive creates a message queue which resides +on the local node with the user-defined name specified in name. +For control and maintenance of the queue, RTEMS allocates and +initializes a QCB. Memory is allocated from the RTEMS Workspace +for the specified count of messages, each of max_message_size +bytes in length. The RTEMS-assigned queue id, returned in id, +is used to access the message queue. + +Specifying @code{@value{RPREFIX}PRIORITY} in attribute_set causes tasks +waiting for a message to be serviced according to task priority. +When @code{@value{RPREFIX}FIFO} is specified, waiting tasks are serviced in First +In-First Out order. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The following message queue attribute constants are +defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority +@item @code{@value{RPREFIX}LOCAL} - local message queue (default) +@item @code{@value{RPREFIX}GLOBAL} - global message queue +@end itemize + +Message queues should not be made global unless +remote tasks must interact with the created message queue. This +is to avoid the system overhead incurred by the creation of a +global message queue. When a global message queue is created, +the message queue's name and id must be transmitted to every +node in the system for insertion in the local copy of the global +object table. + +For GLOBAL message queues, the maximum message size +is effectively limited to the longest message which the MPCI is +capable of transmitting. + +The total number of global objects, including message +queues, is limited by the maximum_global_objects field in the +configuration table. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_IDENT - Get ID of a queue + +@cindex get ID of a message queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_ident +@example +rtems_status_code rtems_message_queue_ident( + rtems_name name, + rtems_unsigned32 node, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Ident ( + Name : in RTEMS.Name; + Node : in RTEMS.Unsigned32; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - queue identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - queue name not found@* +@code{@value{RPREFIX}INVALID_NODE} - invalid node id + +@subheading DESCRIPTION: + +This directive obtains the queue id associated with +the queue name specified in name. If the queue name is not +unique, then the queue id will match one of the queues with that +name. However, this queue id is not guaranteed to correspond to +the desired queue. The queue id is used with other message +related directives to access the message queue. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +If node is @code{@value{RPREFIX}SEARCH_ALL_NODES}, all nodes are searched +with the local node being searched first. All other nodes are +searched with the lowest numbered node searched first. + +If node is a valid node number which does not +represent the local node, then only the message queues exported +by the designated node are searched. + +This directive does not generate activity on remote +nodes. It accesses only the local copy of the global object +table. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_DELETE - Delete a queue + +@cindex delete a message queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_delete +@example +rtems_status_code rtems_message_queue_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - queue deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot delete remote queue + +@subheading DESCRIPTION: + +This directive deletes the message queue specified by +id. As a result of this directive, all tasks blocked waiting to +receive a message from this queue will be readied and returned a +status code which indicates that the message queue was deleted. +If no tasks are waiting, but the queue contains messages, then +RTEMS returns these message buffers back to the system message +buffer pool. The QCB for this queue as well as the memory for +the message buffers is reclaimed by RTEMS. + +@subheading NOTES: + +The calling task will be preempted if its preemption +mode is enabled and one or more local tasks with a higher +priority than the calling task are waiting on the deleted queue. +The calling task will NOT be preempted if the tasks that are +waiting are remote tasks. + +The calling task does not have to be the task that +created the queue, although the task and queue must reside on +the same node. + +When the queue is deleted, any messages in the queue +are returned to the free message buffer pool. Any information +stored in those messages is lost. + +When a global message queue is deleted, the message +queue id must be transmitted to every node in the system for +deletion from the local copy of the global object table. + +Proxies, used to represent remote tasks, are +reclaimed when the message queue is deleted. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_SEND - Put message at rear of a queue + +@cindex send message to a queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_send +@example +rtems_status_code rtems_message_queue_send( + rtems_id id, + void *buffer, + rtems_unsigned32 size +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Send ( + ID : in RTEMS.ID; + Buffer : in RTEMS.Address; + Size : in RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - message sent successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id@* +@code{@value{RPREFIX}INVALID_SIZE} - invalid message size@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}UNSATISFIED} - out of message buffers@* +@code{@value{RPREFIX}TOO_MANY} - queue's limit has been reached + +@subheading DESCRIPTION: + +This directive sends the message buffer of size bytes +in length to the queue specified by id. If a task is waiting at +the queue, then the message is copied to the waiting task's +buffer and the task is unblocked. If no tasks are waiting at the +queue, then the message is copied to a message buffer which is +obtained from this message queue's message buffer pool. The +message buffer is then placed at the rear of the queue. + +@subheading NOTES: + +The calling task will be preempted if it has +preemption enabled and a higher priority task is unblocked as +the result of this directive. + +Sending a message to a global message queue which +does not reside on the local node will generate a request to the +remote node to post the message on the specified message queue. + +If the task to be unblocked resides on a different +node from the message queue, then the message is forwarded to +the appropriate node, the waiting task is unblocked, and the +proxy used to represent the task is reclaimed. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_URGENT - Put message at front of a queue + +@cindex put message at front of queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_urgent +@example +rtems_status_code rtems_message_queue_urgent( + rtems_id id, + void *buffer, + rtems_unsigned32 size +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Urgent ( + ID : in RTEMS.ID; + Buffer : in RTEMS.Address; + Size : in RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - message sent successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id@* +@code{@value{RPREFIX}INVALID_SIZE} - invalid message size@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}UNSATISFIED} - out of message buffers@* +@code{@value{RPREFIX}TOO_MANY} - queue's limit has been reached + +@subheading DESCRIPTION: + +This directive sends the message buffer of size bytes +in length to the queue specified by id. If a task is waiting on +the queue, then the message is copied to the task's buffer and +the task is unblocked. If no tasks are waiting on the queue, +then the message is copied to a message buffer which is obtained +from this message queue's message buffer pool. The message +buffer is then placed at the front of the queue. + +@subheading NOTES: + +The calling task will be preempted if it has +preemption enabled and a higher priority task is unblocked as +the result of this directive. + +Sending a message to a global message queue which +does not reside on the local node will generate a request +telling the remote node to post the message on the specified +message queue. + +If the task to be unblocked resides on a different +node from the message queue, then the message is forwarded to +the appropriate node, the waiting task is unblocked, and the +proxy used to represent the task is reclaimed. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_BROADCAST - Broadcast N messages to a queue + +@cindex broadcast message to a queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_broadcast +@example +rtems_status_code rtems_message_queue_broadcast( + rtems_id id, + void *buffer, + rtems_unsigned32 size, + rtems_unsigned32 *count +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Broadcast ( + ID : in RTEMS.ID; + Buffer : in RTEMS.Address; + Size : in RTEMS.Unsigned32; + Count : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - message broadcasted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{count} is NULL@* +@code{@value{RPREFIX}INVALID_SIZE} - invalid message size + +@subheading DESCRIPTION: + +This directive causes all tasks that are waiting at +the queue specified by id to be unblocked and sent the message +contained in buffer. Before a task is unblocked, the message +buffer of size byes in length is copied to that task's message +buffer. The number of tasks that were unblocked is returned in +count. + +@subheading NOTES: + +The calling task will be preempted if it has +preemption enabled and a higher priority task is unblocked as +the result of this directive. + +The execution time of this directive is directly +related to the number of tasks waiting on the message queue, +although it is more efficient than the equivalent number of +invocations of @code{@value{DIRPREFIX}message_queue_send}. + +Broadcasting a message to a global message queue +which does not reside on the local node will generate a request +telling the remote node to broadcast the message to the +specified message queue. + +When a task is unblocked which resides on a different +node from the message queue, a copy of the message is forwarded +to the appropriate node, the waiting task is unblocked, and the +proxy used to represent the task is reclaimed. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_RECEIVE - Receive message from a queue + +@cindex receive message from a queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_receive +@example +rtems_status_code rtems_message_queue_receive( + rtems_id id, + void *buffer, + rtems_unsigned32 *size, + rtems_unsigned32 option_set, + rtems_interval timeout +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Receive ( + ID : in RTEMS.ID; + Buffer : in RTEMS.Address; + Option_Set : in RTEMS.Option; + Timeout : in RTEMS.Interval; + Size : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - message received successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{count} is NULL@* +@code{@value{RPREFIX}UNSATISFIED} - queue is empty@* +@code{@value{RPREFIX}TIMEOUT} - timed out waiting for message@* +@code{@value{RPREFIX}OBJECT_WAS_DELETED} - queue deleted while waiting + +@subheading DESCRIPTION: + +This directive receives a message from the message +queue specified in id. The @code{@value{RPREFIX}WAIT} and @code{@value{RPREFIX}NO_WAIT} options of the +options parameter allow the calling task to specify whether to +wait for a message to become available or return immediately. +For either option, if there is at least one message in the +queue, then it is copied to buffer, size is set to return the +length of the message in bytes, and this directive returns +immediately with a successful return code. + +If the calling task chooses to return immediately and +the queue is empty, then a status code indicating this condition +is returned. If the calling task chooses to wait at the message +queue and the queue is empty, then the calling task is placed on +the message wait queue and blocked. If the queue was created +with the @code{@value{RPREFIX}PRIORITY} option specified, then +the calling task is inserted into the wait queue according to +its priority. But, if the queue was created with the +@code{@value{RPREFIX}FIFO} option specified, then the +calling task is placed at the rear of the wait queue. + +A task choosing to wait at the queue can optionally +specify a timeout value in the timeout parameter. The timeout +parameter specifies the maximum interval to wait before the +calling task desires to be unblocked. If it is set to +@code{@value{RPREFIX}NO_TIMEOUT}, then the calling task will wait forever. + +@subheading NOTES: + +The following message receive option constants are +defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for a message (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +Receiving a message from a global message queue which +does not reside on the local node will generate a request to the +remote node to obtain a message from the specified message +queue. If no message is available and @code{@value{RPREFIX}WAIT} was specified, then +the task must be blocked until a message is posted. A proxy is +allocated on the remote node to represent the task until the +message is posted. + +A clock tick is required to support the timeout functionality of +this directive. + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_GET_NUMBER_PENDING - Get number of messages pending on a queue + +@cindex get number of pending messages + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_get_number_pending +@example +rtems_status_code rtems_message_queue_get_number_pending( + rtems_id id, + rtems_unsigned32 *count +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Get_Number_Pending ( + ID : in RTEMS.ID; + Count : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - number of messages pending returned successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{count} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id + +@subheading DESCRIPTION: + +This directive returns the number of messages pending on this +message queue in count. If no messages are present +on the queue, count is set to zero. + +@subheading NOTES: + +Getting the number of pending messages on a global message queue which +does not reside on the local node will generate a request to the +remote node to actually obtain the pending message count for +the specified message queue. + + +@c +@c +@c +@page +@subsection MESSAGE_QUEUE_FLUSH - Flush all messages on a queue + +@cindex flush messages on a queue + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_message_queue_flush +@example +rtems_status_code rtems_message_queue_flush( + rtems_id id, + rtems_unsigned32 *count +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Message_Queue_Flush ( + ID : in RTEMS.ID; + Count : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - message queue flushed successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{count} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid queue id + +@subheading DESCRIPTION: + +This directive removes all pending messages from the +specified queue id. The number of messages removed is returned +in count. If no messages are present on the queue, count is set +to zero. + +@subheading NOTES: + +Flushing all messages on a global message queue which +does not reside on the local node will generate a request to the +remote node to actually flush the specified message queue. + diff --git a/doc/user/overview.t b/doc/user/overview.t new file mode 100644 index 0000000000..031fa86d31 --- /dev/null +++ b/doc/user/overview.t @@ -0,0 +1,532 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c This chapter is missing the following figures: +@c +@c Figure 1-1 RTEMS Application Architecture +@c Figure 1-2 RTEMS Internal Architecture +@c + +@chapter Overview + +@section Introduction + +RTEMS, Real-Time Executive for Multiprocessor Systems, is a +real-time executive (kernel) which provides a high performance +environment for embedded military applications including the +following features: + +@itemize @bullet +@item multitasking capabilities +@item homogeneous and heterogeneous multiprocessor systems +@item event-driven, priority-based, preemptive scheduling +@item optional rate monotonic scheduling +@item intertask communication and synchronization +@item priority inheritance +@item responsive interrupt management +@item dynamic memory allocation +@item high level of user configurability +@end itemize + +This manual describes the usage of RTEMS for +applications written in the @value{LANGUAGE} programming language. Those +implementation details that are processor dependent are provided +in the Applications Supplement documents. A supplement +document which addresses specific architectural issues that +affect RTEMS is provided for each processor type that is +supported. + +@section Real-time Application Systems + +Real-time application systems are a special class of +computer applications. They have a complex set of +characteristics that distinguish them from other software +problems. Generally, they must adhere to more rigorous +requirements. The correctness of the system depends not only on +the results of computations, but also on the time at which the +results are produced. The most important and complex +characteristic of real-time application systems is that they +must receive and respond to a set of external stimuli within +rigid and critical time constraints referred to as deadlines. +Systems can be buried by an avalanche of interdependent, +asynchronous or cyclical event streams. + +Deadlines can be further characterized as either hard +or soft based upon the value of the results when produced after +the deadline has passed. A deadline is hard if the results have +no value or if their use will result in a catastrophic event. +In contrast, results which are produced after a soft deadline +may have some value. + +Another distinguishing requirement of real-time +application systems is the ability to coordinate or manage a +large number of concurrent activities. Since software is a +synchronous entity, this presents special problems. One +instruction follows another in a repeating synchronous cycle. +Even though mechanisms have been developed to allow for the +processing of external asynchronous events, the software design +efforts required to process and manage these events and tasks +are growing more complicated. + +The design process is complicated further by +spreading this activity over a set of processors instead of a +single processor. The challenges associated with designing and +building real-time application systems become very complex when +multiple processors are involved. New requirements such as +interprocessor communication channels and global resources that +must be shared between competing processors are introduced. The +ramifications of multiple processors complicate each and every +characteristic of a real-time system. + +@section Real-time Executive + +Fortunately, real-time operating systems or real-time +executives serve as a cornerstone on which to build the +application system. A real-time multitasking executive allows +an application to be cast into a set of logical, autonomous +processes or tasks which become quite manageable. Each task is +internally synchronous, but different tasks execute +independently, resulting in an asynchronous processing stream. +Tasks can be dynamically paused for many reasons resulting in a +different task being allowed to execute for a period of time. +The executive also provides an interface to other system +components such as interrupt handlers and device drivers. +System components may request the executive to allocate and +coordinate resources, and to wait for and trigger synchronizing +conditions. The executive system calls effectively extend the +CPU instruction set to support efficient multitasking. By +causing tasks to travel through well-defined state transitions, +system calls permit an application to demand-switch between +tasks in response to real-time events. + +By proper grouping of responses to stimuli into +separate tasks, a system can now asynchronously switch between +independent streams of execution, directly responding to +external stimuli as they occur. This allows the system design +to meet critical performance specifications which are typically +measured by guaranteed response time and transaction throughput. +The multiprocessor extensions of RTEMS provide the features +necessary to manage the extra requirements introduced by a +system distributed across several processors. It removes the +physical barriers of processor boundaries from the world of the +system designer, enabling more critical aspects of the system to +receive the required attention. Such a system, based on an +efficient real-time, multiprocessor executive, is a more +realistic model of the outside world or environment for which it +is designed. As a result, the system will always be more +logical, efficient, and reliable. + +By using the directives provided by RTEMS, the +real-time applications developer is freed from the problem of +controlling and synchronizing multiple tasks and processors. In +addition, one need not develop, test, debug, and document +routines to manage memory, pass messages, or provide mutual +exclusion. The developer is then able to concentrate solely on +the application. By using standard software components, the +time and cost required to develop sophisticated real-time +applications is significantly reduced. + +@section RTEMS Application Architecture + +One important design goal of RTEMS was to provide a +bridge between two critical layers of typical real-time systems. +As shown in the following figure, RTEMS serves as a buffer between the +project dependent application code and the target hardware. +Most hardware dependencies for real-time applications can be +localized to the low level device drivers. + +@ifset use-ascii +@example +@group + +-----------------------------------------------------------+ + | Application Dependent Software | + | +----------------------------------------+ | + | | Standard Application Components | | + | | +-------------+---+ | + | +---+-----------+ | | | + | | Board Support | | RTEMS | | + | | Package | | | | + +----+---------------+--------------+-----------------+-----| + | Target Hardware | + +-----------------------------------------------------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\vrule#& +\hbox to 0.50in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.50in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.50in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.50in{\enskip\hfil#\hfil}& +\vrule#\cr +\multispan{17}\hrulefill\cr +% to force all columns to desired width +& \enskip && \enskip && \enskip && \enskip && + \enskip && \enskip &&\enskip &&\enskip &\cr +% For debugging columns +%& \enskip 0&& \enskip 1&& \enskip 2&& \enskip 3&& +% \enskip 4&& \enskip 5&&\enskip 6&&\enskip 7&\cr +\strut&\multispan{15}&\cr +&\multispan{15}\hfil Application Dependent Software\hfil&\cr +\strut&\multispan{15}&\cr +&\multispan{2}&&\multispan{8}\hrulefill &\multispan{2}&\cr +\strut&\multispan{2}&&&\multispan{7}&&\multispan{2}&&\cr +&\multispan{2}&&&\multispan{7}\hfil Standard Application Components\hfil& + &\multispan{2}&&\cr +\strut&\multispan{2}&&&\multispan{7}&&\multispan{2}&&\cr +&&\multispan{5}\hrulefill&&\multispan{7}\hrulefill&&\cr +\strut&&&\multispan{3} &&&&\multispan{5}&&&\cr +&&&\multispan{3}\hfil Device\hfil&&&&\multispan{5}\hfil RTEMS\hfil&&&\cr +&&&\multispan{3}\hfil Drivers\hfil&&&&\multispan{5}&&&\cr +\strut&&&\multispan{3} &&&&\multispan{5}&&&\cr +\multispan{17}\hrulefill\cr +\strut&\multispan{15}&\cr +&\multispan{15}\hfil Target Hardware\hfil&\cr +\strut&\multispan{15}&\cr +\multispan{17}\hrulefill\cr +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<IMG SRC="rtemsarc.png" WIDTH=500 HEIGHT=300 ALT="RTEMS Application Architecture"> +@end html +@end ifset + +The RTEMS I/O interface manager provides an efficient tool for incorporating +these hardware dependencies into the system while simultaneously +providing a general mechanism to the application code that +accesses them. A well designed real-time system can benefit +from this architecture by building a rich library of standard +application components which can be used repeatedly in other +real-time projects. + +@section RTEMS Internal Architecture + +RTEMS can be viewed as a set of layered components that work in +harmony to provide a set of services to a real-time application +system. The executive interface presented to the application is +formed by grouping directives into logical sets called resource managers. +Functions utilized by multiple managers such as scheduling, +dispatching, and object management are provided in the executive +core. The executive core depends on a small set of CPU dependent routines. +Together these components provide a powerful run time +environment that promotes the development of efficient real-time +application systems. The following figure illustrates this organization: + +@ifset use-ascii +@example +@group + +-----------------------------------------------+ + | RTEMS Executive Interface | + +-----------------------------------------------+ + | RTEMS Core | + +-----------------------------------------------+ + | CPU Dependent Code | + +-----------------------------------------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@c for now use the ascii version +@c @example +@c @group +@c +-----------------------------------------------+ +@c | RTEMS Executive Interface | +@c +-----------------------------------------------+ +@c | RTEMS Core | +@c +-----------------------------------------------+ +@c | CPU Dependent Code | +@c +-----------------------------------------------+ +@c @end group +@c @end example +@image{rtemspie,4in,3in} +@tex +@end tex +@end ifset + +@ifset use-html +@html +<IMG SRC="rtemspie.png" WIDTH=500 HEIGHT=300 ALT="RTEMS Architecture"> +@end html +@end ifset +Subsequent chapters present a detailed description of the capabilities +provided by each of the following RTEMS managers: + +@itemize @bullet +@item initialization +@item task +@item interrupt +@item clock +@item timer +@item semaphore +@item message +@item event +@item signal +@item partition +@item region +@item dual ported memory +@item I/O +@item fatal error +@item rate monotonic +@item user extensions +@item multiprocessing +@end itemize + +@section User Customization and Extensibility + +As thirty-two bit microprocessors have decreased in +cost, they have become increasingly common in a variety of +embedded systems. A wide range of custom and general-purpose +processor boards are based on various thirty-two bit processors. +RTEMS was designed to make no assumptions concerning the +characteristics of individual microprocessor families or of +specific support hardware. In addition, RTEMS allows the system +developer a high degree of freedom in customizing and extending +its features. + +RTEMS assumes the existence of a supported +microprocessor and sufficient memory for both RTEMS and the +real-time application. Board dependent components such as +clocks, interrupt controllers, or I/O devices can be easily +integrated with RTEMS. The customization and extensibility +features allow RTEMS to efficiently support as many environments +as possible. + +@section Portability + +The issue of portability was the major factor in the +creation of RTEMS. Since RTEMS is designed to isolate the +hardware dependencies in the specific board support packages, +the real-time application should be easily ported to any other +processor. The use of RTEMS allows the development of real-time +applications which can be completely independent of a particular +microprocessor architecture. + +@section Memory Requirements + +Since memory is a critical resource in many real-time +embedded systems, RTEMS was specifically designed to allow +unused managers to be excluded from the run-time environment. +This allows the application designer the flexibility to tailor +RTEMS to most efficiently meet system requirements while still +satisfying even the most stringent memory constraints. As a +result, the size of the RTEMS executive is application +dependent. A worksheet is provided in the Memory Requirements +chapter of the Applications Supplement document for a specific +target processor. The worksheet is used to calculate the memory +requirements of a custom RTEMS run-time environment. The +following managers may be optionally excluded: + +@itemize @bullet +@item clock +@item timer +@item semaphore +@item message +@item event +@item signal +@item partition +@item region +@item dual ported memory +@item I/O +@item rate monotonic +@item fatal error +@item multiprocessing +@end itemize + +RTEMS utilizes memory for both code and data space. +Although RTEMS' data space must be in RAM, its code space can be +located in either ROM or RAM. + +@section Audience + +This manual was written for experienced real-time +software developers. Although some background is provided, it +is assumed that the reader is familiar with the concepts of task +management as well as intertask communication and +synchronization. Since directives, user related data +structures, and examples are presented in @value{LANGUAGE}, a basic +understanding of the @value{LANGUAGE} programming language +is required to fully +understand the material presented. However, because of the +similarity of the Ada and C RTEMS implementations, users will +find that the use and behavior of the two implementations is +very similar. A working knowledge of the target processor is +helpful in understanding some of RTEMS' features. A thorough +understanding of the executive cannot be obtained without +studying the entire manual because many of RTEMS' concepts and +features are interrelated. Experienced RTEMS users will find +that the manual organization facilitates its use as a reference +document. + +@section Conventions + +The following conventions are used in this manual: + +@itemize @bullet +@item Significant words or phrases as well as all directive +names are printed in bold type. + +@item Items in bold capital letters are constants defined by +RTEMS. Each language interface provided by RTEMS includes a +file containing the standard set of constants, data types, and +@value{STRUCTURE} definitions which can be incorporated into the user +application. + +@item A number of type definitions are provided by RTEMS and +can be found in rtems.h. + +@item The characters "0x" preceding a number indicates that +the number is in hexadecimal format. Any other numbers are +assumed to be in decimal format. +@end itemize + +@section Manual Organization + +This first chapter has presented the introductory and +background material for the RTEMS executive. The remaining +chapters of this manual present a detailed description of RTEMS +and the environment, including run time behavior, it creates for +the user. + +A chapter is dedicated to each manager and provides a +detailed discussion of each RTEMS manager and the directives +which it provides. The presentation format for each directive +includes the following sections: + +@itemize @bullet +@item Calling sequence +@item Directive status codes +@item Description +@item Notes +@end itemize + +The following provides an overview of the remainder +of this manual: + +@table @asis +@item Chapter 2 +Key Concepts: presents an +introduction to the ideas which are common across multiple RTEMS +managers. + +@item Chapter 3: +Initialization Manager: describes the functionality and directives +provided by the Initialization Manager. + +@item Chapter 4: +Task Manager: describes the functionality and directives provided +by the Task Manager. + +@item Chapter 5: +Interrupt Manager: describes the functionality and directives +provided by the Interrupt Manager. + +@item Chapter 6: +Clock Manager: describes the functionality and directives +provided by the Clock Manager. + +@item Chapter 7 +Timer Manager: describes the functionality and directives provided +by the Timer Manager. + +@item Chapter 8: +Semaphore Manager: describes the functionality and directives +provided by the Semaphore Manager. + +@item Chapter 9: +Message Manager: describes the functionality and directives +provided by the Message Manager. + +@item Chapter 10: +Event Manager: describes the +functionality and directives provided by the Event Manager. + +@item Chapter 11: +Signal Manager: describes the +functionality and directives provided by the Signal Manager. + +@item Chapter 12: +Partition Manager: describes the +functionality and directives provided by the Partition Manager. + +@item Chapter 13: +Region Manager: describes the +functionality and directives provided by the Region Manager. + +@item Chapter 14: +Dual-Ported Memory Manager: describes +the functionality and directives provided by the Dual-Ported +Memory Manager. + +@item Chapter 15: +I/O Manager: describes the +functionality and directives provided by the I/O Manager. + +@item Chapter 16: +Fatal Error Manager: describes the functionality and directives +provided by the Fatal Error Manager. + +@item Chapter 17: +Scheduling Concepts: details the RTEMS scheduling algorithm and +task state transitions. + +@item Chapter 18: +Rate Monotonic Manager: describes the functionality and directives +provided by the Rate Monotonic Manager. + +@item Chapter 19: +Board Support Packages: defines the +functionality required of user-supplied board support packages. + +@item Chapter 20: +User Extensions: shows the user how to +extend RTEMS to incorporate custom features. + +@item Chapter 21: +Configuring a System: details the process by which one tailors RTEMS +for a particular single-processor or multiprocessor application. + +@item Chapter 22: +Multiprocessing Manager: presents a +conceptual overview of the multiprocessing capabilities provided +by RTEMS as well as describing the Multiprocessing +Communications Interface Layer and Multiprocessing Manager +directives. + +@item Chapter 23: +Directive Status Codes: provides a definition of each of the +directive status codes referenced in this manual. + +@item Chapter 24: +Example Application: provides a template for simple RTEMS applications. + +@item Chapter 25: +Glossary: defines terms used throughout this manual. + +@end table + + diff --git a/doc/user/part.t b/doc/user/part.t new file mode 100644 index 0000000000..eef41e6308 --- /dev/null +++ b/doc/user/part.t @@ -0,0 +1,453 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Partition Manager + +@cindex partitions + +@section Introduction + +The partition manager provides facilities to +dynamically allocate memory in fixed-size units. The directives +provided by the partition manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}partition_create} - Create a partition +@item @code{@value{DIRPREFIX}partition_ident} - Get ID of a partition +@item @code{@value{DIRPREFIX}partition_delete} - Delete a partition +@item @code{@value{DIRPREFIX}partition_get_buffer} - Get buffer from a partition +@item @code{@value{DIRPREFIX}partition_return_buffer} - Return buffer to a partition +@end itemize + +@section Background + +@subsection Partition Manager Definitions + +@cindex partition, definition + +A partition is a physically contiguous memory area +divided into fixed-size buffers that can be dynamically +allocated and deallocated. + +@cindex buffers, definition + +Partitions are managed and maintained as a list of +buffers. Buffers are obtained from the front of the partition's +free buffer chain and returned to the rear of the same chain. +When a buffer is on the free buffer chain, RTEMS uses eight +bytes of each buffer as the free buffer chain. When a buffer is +allocated, the entire buffer is available for application use. +Therefore, modifying memory that is outside of an allocated +buffer could destroy the free buffer chain or the contents of an +adjacent allocated buffer. + +@subsection Building a Partition Attribute Set + +@cindex partition attribute set, building + +In general, an attribute set is built by a bitwise OR +of the desired attribute components. The set of valid partition +attributes is provided in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}LOCAL} - local task (default) +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +Attribute values are specifically designed to be +mutually exclusive, therefore bitwise OR and addition operations +are equivalent as long as each attribute appears exactly once in +the component list. An attribute listed as a default is not +required to appear in the attribute list, although it is a good +programming practice to specify default attributes. If all +defaults are desired, the attribute +@code{@value{RPREFIX}DEFAULT_ATTRIBUTES} should be +specified on this call. The attribute_set parameter should be +@code{@value{RPREFIX}GLOBAL} to indicate that the partition +is to be known globally. + +@section Operations + +@subsection Creating a Partition + +The @code{@value{DIRPREFIX}partition_create} directive creates a partition +with a user-specified name. The partition's name, starting +address, length and buffer size are all specified to the +@code{@value{DIRPREFIX}partition_create} directive. +RTEMS allocates a Partition Control +Block (PTCB) from the PTCB free list. This data structure is +used by RTEMS to manage the newly created partition. The number +of buffers in the partition is calculated based upon the +specified partition length and buffer size, and returned to the +calling task along with a unique partition ID. + +@subsection Obtaining Partition IDs + +When a partition is created, RTEMS generates a unique +partition ID and assigned it to the created partition until it +is deleted. The partition ID may be obtained by either of two +methods. First, as the result of an invocation of the +@code{@value{DIRPREFIX}partition_create} directive, the partition +ID is stored in a user provided location. Second, the partition +ID may be obtained later using the @code{@value{DIRPREFIX}partition_ident} +directive. The partition ID is used by other partition manager directives +to access this partition. + +@subsection Acquiring a Buffer + +A buffer can be obtained by calling the +@code{@value{DIRPREFIX}partition_get_buffer} directive. +If a buffer is available, then +it is returned immediately with a successful return code. +Otherwise, an unsuccessful return code is returned immediately +to the caller. Tasks cannot block to wait for a buffer to +become available. + +@subsection Releasing a Buffer + +Buffers are returned to a partition's free buffer +chain with the @code{@value{DIRPREFIX}partition_return_buffer} directive. This +directive returns an error status code if the returned buffer +was not previously allocated from this partition. + +@subsection Deleting a Partition + +The @code{@value{DIRPREFIX}partition_delete} directive allows a partition to +be removed and returned to RTEMS. When a partition is deleted, +the PTCB for that partition is returned to the PTCB free list. +A partition with buffers still allocated cannot be deleted. Any +task attempting to do so will be returned an error status code. + +@section Directives + +This section details the partition manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection PARTITION_CREATE - Create a partition + +@cindex create a partition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_partition_create +@example +rtems_status_code rtems_partition_create( + rtems_name name, + void *starting_address, + rtems_unsigned32 length, + rtems_unsigned32 buffer_size, + rtems_attribute attribute_set, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Partition_Create ( + Name : in RTEMS.Name; + Starting_Address : in RTEMS.Address; + Length : in RTEMS.Unsigned32; + Buffer_Size : in RTEMS.Unsigned32; + Attribute_Set : in RTEMS.Attribute; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - partition created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}TOO_MANY} - too many partitions created@* +@code{@value{RPREFIX}INVALID_ADDRESS} - address not on four byte boundary@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{starting_address} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_SIZE} - length or buffer size is 0@* +@code{@value{RPREFIX}INVALID_SIZE} - length is less than the buffer size@* +@code{@value{RPREFIX}INVALID_SIZE} - buffer size not a multiple of 4@* +@code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured@* +@code{@value{RPREFIX}TOO_MANY} - too many global objects + +@subheading DESCRIPTION: + +This directive creates a partition of fixed size +buffers from a physically contiguous memory space which starts +at starting_address and is length bytes in size. Each allocated +buffer is to be of buffer_length in bytes. The assigned +partition id is returned in id. This partition id is used to +access the partition with other partition related directives. +For control and maintenance of the partition, RTEMS allocates a +PTCB from the local PTCB free pool and initializes it. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The starting_address and buffer_size parameters must +be multiples of four. + +Memory from the partition is not used by RTEMS to +store the Partition Control Block. + +The following partition attribute constants are +defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}LOCAL} - local task (default) +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +The PTCB for a global partition is allocated on the +local node. The memory space used for the partition must reside +in shared memory. Partitions should not be made global unless +remote tasks must interact with the partition. This is to avoid +the overhead incurred by the creation of a global partition. +When a global partition is created, the partition's name and id +must be transmitted to every node in the system for insertion in +the local copy of the global object table. + +The total number of global objects, including +partitions, is limited by the maximum_global_objects field in +the Configuration Table. + +@c +@c +@c +@page +@subsection PARTITION_IDENT - Get ID of a partition + +@cindex get ID of a partition +@cindex obtain ID of a partition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_partition_ident +@example +rtems_status_code rtems_partition_ident( + rtems_name name, + rtems_unsigned32 node, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Partition_Ident ( + Name : in RTEMS.Name; + Node : in RTEMS.Unsigned32; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - partition identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - partition name not found@* +@code{@value{RPREFIX}INVALID_NODE} - invalid node id + +@subheading DESCRIPTION: + +This directive obtains the partition id associated +with the partition name. If the partition name is not unique, +then the partition id will match one of the partitions with that +name. However, this partition id is not guaranteed to +correspond to the desired partition. The partition id is used +with other partition related directives to access the partition. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +If node is @code{@value{RPREFIX}SEARCH_ALL_NODES}, all nodes are searched +with the local node being searched first. All other nodes are +searched with the lowest numbered node searched first. + +If node is a valid node number which does not +represent the local node, then only the partitions exported by +the designated node are searched. + +This directive does not generate activity on remote +nodes. It accesses only the local copy of the global object +table. + +@c +@c +@c +@page +@subsection PARTITION_DELETE - Delete a partition + +@cindex delete a partition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_partition_delete +@example +rtems_status_code rtems_partition_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Partition_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - partition deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid partition id@* +@code{@value{RPREFIX}RESOURCE_IN_USE} - buffers still in use@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot delete remote partition + +@subheading DESCRIPTION: + +This directive deletes the partition specified by id. +The partition cannot be deleted if any of its buffers are still +allocated. The PTCB for the deleted partition is reclaimed by +RTEMS. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The calling task does not have to be the task that +created the partition. Any local task that knows the partition +id can delete the partition. + +When a global partition is deleted, the partition id +must be transmitted to every node in the system for deletion +from the local copy of the global object table. + +The partition must reside on the local node, even if +the partition was created with the @code{@value{RPREFIX}GLOBAL} option. + +@c +@c +@c +@page +@subsection PARTITION_GET_BUFFER - Get buffer from a partition + +@cindex get buffer from partition +@cindex obtain buffer from partition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_partition_get_buffer +@example +rtems_status_code rtems_partition_get_buffer( + rtems_id id, + void **buffer +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Partition_Get_Buffer ( + ID : in RTEMS.ID; + Buffer : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - buffer obtained successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid partition id@* +@code{@value{RPREFIX}UNSATISFIED} - all buffers are allocated + +@subheading DESCRIPTION: + +This directive allows a buffer to be obtained from +the partition specified in id. The address of the allocated +buffer is returned in buffer. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +All buffers begin on a four byte boundary. + +A task cannot wait on a buffer to become available. + +Getting a buffer from a global partition which does +not reside on the local node will generate a request telling the +remote node to allocate a buffer from the specified partition. + +@c +@c +@c +@page +@subsection PARTITION_RETURN_BUFFER - Return buffer to a partition + +@cindex return buffer to partitition + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_partition_return_buffer +@example +rtems_status_code rtems_partition_return_buffer( + rtems_id id, + void *buffer +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Partition_Return_Buffer ( + ID : in RTEMS.ID; + Buffer : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - buffer returned successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{buffer} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid partition id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - buffer address not in partition + +@subheading DESCRIPTION: + +This directive returns the buffer specified by buffer +to the partition specified by id. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +Returning a buffer to a global partition which does +not reside on the local node will generate a request telling the +remote node to return the buffer to the specified partition. diff --git a/doc/user/preface.texi b/doc/user/preface.texi new file mode 100644 index 0000000000..3ffb90dedf --- /dev/null +++ b/doc/user/preface.texi @@ -0,0 +1,192 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifinfo +@node Preface, Overview, Top, Top +@end ifinfo +@unnumbered Preface + +In recent years, the cost required to develop a +software product has increased significantly while the target +hardware costs have decreased. Now a larger portion of money is +expended in developing, using, and maintaining software. The +trend in computing costs is the complete dominance of software +over hardware costs. Because of this, it is necessary that +formal disciplines be established to increase the probability +that software is characterized by a high degree of correctness, +maintainability, and portability. In addition, these +disciplines must promote practices that aid in the consistent +and orderly development of a software system within schedule and +budgetary constraints. To be effective, these disciplines must +adopt standards which channel individual software efforts toward +a common goal. + +The push for standards in the software development +field has been met with various degrees of success. The +Microprocessor Operating Systems Interfaces (MOSI) effort has +experienced only limited success. As popular as the UNIX +operating system has grown, the attempt to develop a standard +interface definition to allow portable application development +has only recently begun to produce the results needed in this +area. Unfortunately, very little effort has been expended to +provide standards addressing the needs of the real-time +community. Several organizations have addressed this need +during recent years. + +The Real Time Executive Interface Definition (RTEID) +was developed by Motorola with technical input from Software +Components Group. RTEID was adopted by the VMEbus International +Trade Association (VITA) as a baseline draft for their proposed +standard multiprocessor, real-time executive interface, Open +Real-Time Kernel Interface Definition (ORKID). These two groups +are currently working together with the IEEE P1003.4 committee +to insure that the functionality of their proposed standards is +adopted as the real-time extensions to POSIX. + +This emerging standard defines an interface for the +development of real-time software to ease the writing of +real-time application programs that are directly portable across +multiple real-time executive implementations. This interface +includes both the source code interfaces and run-time behavior +as seen by a real-time application. It does not include the +details of how a kernel implements these functions. The +standard's goal is to serve as a complete definition of external +interfaces so that application code that conforms to these +interfaces will execute properly in all real-time executive +environments. With the use of a standards compliant executive, +routines that acquire memory blocks, create and manage message +queues, establish and use semaphores, and send and receive +signals need not be redeveloped for a different real-time +environment as long as the new environment is compliant with the +standard. Software developers need only concentrate on the +hardware dependencies of the real-time system. Furthermore, +most hardware dependencies for real-time applications can be +localized to the device drivers. + +A compliant executive provides simple and flexible +real-time multiprocessing. It easily lends itself to both +tightly-coupled and loosely-coupled configurations (depending on +the system hardware configuration). Objects such as tasks, +queues, events, signals, semaphores, and memory blocks can be +designated as global objects and accessed by any task regardless +of which processor the object and the accessing task reside. + +The acceptance of a standard for real-time executives +will produce the same advantages enjoyed from the push for UNIX +standardization by AT&T's System V Interface Definition and +IEEE's POSIX efforts. A compliant multiprocessing executive +will allow close coupling between UNIX systems and real-time +executives to provide the many benefits of the UNIX development +environment to be applied to real-time software development. +Together they provide the necessary laboratory environment to +implement real-time, distributed, embedded systems using a wide +variety of computer architectures. + +A study was completed in 1988, within the Research, +Development, and Engineering Center, U.S. Army Missile Command, +which compared the various aspects of the Ada programming +language as they related to the application of Ada code in +distributed and/or multiple processing systems. Several +critical conclusions were derived from the study. These +conclusions have a major impact on the way the Army develops +application software for embedded applications. These impacts +apply to both in-house software development and contractor +developed software. + +A conclusion of the analysis, which has been +previously recognized by other agencies attempting to utilize +Ada in a distributed or multiprocessing environment, is that the +Ada programming language does not adequately support +multiprocessing. Ada does provide a mechanism for +multi-tasking, however, this capability exists only for a single +processor system. The language also does not have inherent +capabilities to access global named variables, flags or program +code. These critical features are essential in order for data +to be shared between processors. However, these drawbacks do +have workarounds which are sometimes awkward and defeat the +intent of software maintainability and portability goals. + +Another conclusion drawn from the analysis, was that +the run time executives being delivered with the Ada compilers +were too slow and inefficient to be used in modern missile +systems. A run time executive is the core part of the run time +system code, or operating system code, that controls task +scheduling, input/output management and memory management. +Traditionally, whenever efficient executive (also known as +kernel) code was required by the application, the user developed +in-house software. This software was usually written in +assembly language for optimization. + +Because of this shortcoming in the Ada programming +language, software developers in research and development and +contractors for project managed systems, are mandated by +technology to purchase and utilize off-the-shelf third party +kernel code. The contractor, and eventually the Government, +must pay a licensing fee for every copy of the kernel code used +in an embedded system. + +The main drawback to this development environment is +that the Government does not own, nor has the right to modify +code contained within the kernel. V&V techniques in this +situation are more difficult than if the complete source code +were available. Responsibility for system failures due to faulty +software is yet another area to be resolved under this +environment. + +The Guidance and Control Directorate began a software +development effort to address these problems. A project to +develop an experimental run time kernel was begun that will +eliminate the major drawbacks of the Ada programming language +mentioned above. The Real Time Executive for Multiprocessor Systems +(RTEMS) provides full capabilities for management of tasks, +interrupts, time, and multiple processors in addition to those +features typical of generic operating systems. The code is +Government owned, so no licensing fees are necessary. RTEMS has +been implemented in both the Ada and C programming languages. +It has been ported to the following processor families: + +@itemize @bullet +@item Intel i386 and above +@item Intel i960 +@item Motorola MC68xxx +@item Motorola MC683xx +@item Motorola ColdFire +@item ARM +@item MIPS +@item PowerPC +@item SPARC +@item Hitachi SH +@item Hitachi H8/300 +@item Texas Instruments C3x/C4x +@item OpenCores OR32 +@item UNIX +@end itemize + +Support for other processor families, including RISC, CISC, and DSP, is +planned. Since almost all of RTEMS is written in a high level language, +ports to additional processor families require minimal effort. + +RTEMS multiprocessor support is capable of handling +either homogeneous or heterogeneous systems. The kernel +automatically compensates for architectural differences (byte +swapping, etc.) between processors. This allows a much easier +transition from one processor family to another without a major +system redesign. + +Since the proposed standards are still in draft form, +RTEMS cannot and does not claim compliance. However, the status +of the standard is being carefully monitored to guarantee that +RTEMS provides the functionality specified in the standard. +Once approved, RTEMS will be made compliant. + +This document is a detailed users guide for a +functionally compliant real-time multiprocessor executive. It +describes the user interface and run-time behavior of Release +@value{VERSION} of the @value{LANGUAGE} interface +to RTEMS. + diff --git a/doc/user/region.t b/doc/user/region.t new file mode 100644 index 0000000000..4b90443049 --- /dev/null +++ b/doc/user/region.t @@ -0,0 +1,665 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Region Manager + +@cindex regions + +@section Introduction + +The region manager provides facilities to dynamically +allocate memory in variable sized units. The directives +provided by the region manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}region_create} - Create a region +@item @code{@value{DIRPREFIX}region_ident} - Get ID of a region +@item @code{@value{DIRPREFIX}region_delete} - Delete a region +@item @code{@value{DIRPREFIX}region_extend} - Add memory to a region +@item @code{@value{DIRPREFIX}region_get_segment} - Get segment from a region +@item @code{@value{DIRPREFIX}region_return_segment} - Return segment to a region +@item @code{@value{DIRPREFIX}region_get_segment_size} - Obtain size of a segment +@end itemize + +@section Background + +@subsection Region Manager Definitions + +@cindex region, definition +@cindex segment, definition + +A region makes up a physically contiguous memory +space with user-defined boundaries from which variable-sized +segments are dynamically allocated and deallocated. A segment +is a variable size section of memory which is allocated in +multiples of a user-defined page size. This page size is +required to be a multiple of four greater than or equal to four. +For example, if a request for a 350-byte segment is made in a +region with 256-byte pages, then a 512-byte segment is allocated. + +Regions are organized as doubly linked chains of +variable sized memory blocks. Memory requests are allocated +using a first-fit algorithm. If available, the requester +receives the number of bytes requested (rounded up to the next +page size). RTEMS requires some overhead from the region's +memory for each segment that is allocated. Therefore, an +application should only modify the memory of a segment that has +been obtained from the region. The application should NOT +modify the memory outside of any obtained segments and within +the region's boundaries while the region is currently active in +the system. + +Upon return to the region, the free block is +coalesced with its neighbors (if free) on both sides to produce +the largest possible unused block. + +@subsection Building an Attribute Set + +@cindex region attribute set, building + +In general, an attribute set is built by a bitwise OR +of the desired attribute components. The set of valid region +attributes is provided in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority +@end itemize + +Attribute values are specifically designed to be +mutually exclusive, therefore bitwise OR and addition operations +are equivalent as long as each attribute appears exactly once in +the component list. An attribute listed as a default is not +required to appear in the attribute list, although it is a good +programming practice to specify default attributes. If all +defaults are desired, the attribute +@code{@value{RPREFIX}DEFAULT_ATTRIBUTES} should be +specified on this call. + +This example demonstrates the attribute_set parameter +needed to create a region with the task priority waiting queue +discipline. The attribute_set parameter to the +@code{@value{DIRPREFIX}region_create} +directive should be @code{@value{RPREFIX}PRIORITY}. + +@subsection Building an Option Set + +In general, an option is built by a bitwise OR of the +desired option components. The set of valid options for the +@code{@value{DIRPREFIX}region_get_segment} directive are +listed in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for semaphore (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +Option values are specifically designed to be +mutually exclusive, therefore bitwise OR and addition operations +are equivalent as long as each option appears exactly once in +the component list. An option listed as a default is not +required to appear in the option list, although it is a good +programming practice to specify default options. If all +defaults are desired, the option +@code{@value{RPREFIX}DEFAULT_OPTIONS} should be +specified on this call. + +This example demonstrates the option parameter needed +to poll for a segment. The option parameter passed to the +@code{@value{DIRPREFIX}region_get_segment} directive should +be @code{@value{RPREFIX}NO_WAIT}. + +@section Operations + +@subsection Creating a Region + +The @code{@value{DIRPREFIX}region_create} directive creates a region with the +user-defined name. The user may select FIFO or task priority as +the method for placing waiting tasks in the task wait queue. +RTEMS allocates a Region Control Block (RNCB) from the RNCB free +list to maintain the newly created region. RTEMS also generates +a unique region ID which is returned to the calling task. + +It is not possible to calculate the exact number of +bytes available to the user since RTEMS requires overhead for +each segment allocated. For example, a region with one segment +that is the size of the entire region has more available bytes +than a region with two segments that collectively are the size +of the entire region. This is because the region with one +segment requires only the overhead for one segment, while the +other region requires the overhead for two segments. + +Due to automatic coalescing, the number of segments +in the region dynamically changes. Therefore, the total +overhead required by RTEMS dynamically changes. + +@subsection Obtaining Region IDs + +When a region is created, RTEMS generates a unique +region ID and assigns it to the created region until it is +deleted. The region ID may be obtained by either of two +methods. First, as the result of an invocation of the +@code{@value{DIRPREFIX}region_create} directive, +the region ID is stored in a user +provided location. Second, the region ID may be obtained later +using the @code{@value{DIRPREFIX}region_ident} directive. +The region ID is used by other region manager directives to +access this region. + +@subsection Adding Memory to a Region + +The @code{@value{DIRPREFIX}region_extend} directive may be used to add memory +to an existing region. The caller specifies the size in bytes +and starting address of the memory being added. + +NOTE: Please see the release notes or RTEMS source +code for information regarding restrictions on the location of +the memory being added in relation to memory already in the +region. + +@subsection Acquiring a Segment + +The @code{@value{DIRPREFIX}region_get_segment} directive attempts to acquire +a segment from a specified region. If the region has enough +available free memory, then a segment is returned successfully +to the caller. When the segment cannot be allocated, one of the +following situations applies: + +@itemize @bullet +@item By default, the calling task will wait forever to acquire the segment. + +@item Specifying the @code{@value{RPREFIX}NO_WAIT} option forces +an immediate return with an error status code. + +@item Specifying a timeout limits the interval the task will +wait before returning with an error status code. +@end itemize + +If the task waits for the segment, then it is placed +in the region's task wait queue in either FIFO or task priority +order. All tasks waiting on a region are returned an error when +the message queue is deleted. + +@subsection Releasing a Segment + +When a segment is returned to a region by the +@code{@value{DIRPREFIX}region_return_segment} directive, it is merged with its +unallocated neighbors to form the largest possible segment. The +first task on the wait queue is examined to determine if its +segment request can now be satisfied. If so, it is given a +segment and unblocked. This process is repeated until the first +task's segment request cannot be satisfied. + +@subsection Obtaining the Size of a Segment + +The @code{@value{DIRPREFIX}region_get_segment_size} directive returns the +size in bytes of the specified segment. The size returned +includes any "extra" memory included in the segment because of +rounding up to a page size boundary. + +@subsection Deleting a Region + +A region can be removed from the system and returned +to RTEMS with the @code{@value{DIRPREFIX}region_delete} +directive. When a region is +deleted, its control block is returned to the RNCB free list. A +region with segments still allocated is not allowed to be +deleted. Any task attempting to do so will be returned an +error. As a result of this directive, all tasks blocked waiting +to obtain a segment from the region will be readied and returned +a status code which indicates that the region was deleted. + +@section Directives + +This section details the region manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection REGION_CREATE - Create a region + +@cindex create a region + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_create +@example +rtems_status_code rtems_region_create( + rtems_name name, + void *starting_address, + rtems_unsigned32 length, + rtems_unsigned32 page_size, + rtems_attribute attribute_set, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Create ( + Name : in RTEMS.Name; + Starting_Address : in RTEMS.Address; + Length : in RTEMS.Unsigned32; + Page_Size : in RTEMS.Unsigned32; + Attribute_Set : in RTEMS.Attribute; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - region created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{starting_address} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - address not on four byte boundary@* +@code{@value{RPREFIX}TOO_MANY} - too many regions created@* +@code{@value{RPREFIX}INVALID_SIZE} - invalid page size + +@subheading DESCRIPTION: + +This directive creates a region from a physically +contiguous memory space which starts at starting_address and is +length bytes long. Segments allocated from the region will be a +multiple of page_size bytes in length. The assigned region id +is returned in id. This region id is used as an argument to +other region related directives to access the region. + +For control and maintenance of the region, RTEMS +allocates and initializes an RNCB from the RNCB free pool. Thus +memory from the region is not used to store the RNCB. However, +some overhead within the region is required by RTEMS each time a +segment is constructed in the region. + +Specifying @code{@value{RPREFIX}PRIORITY} in attribute_set causes tasks +waiting for a segment to be serviced according to task priority. +Specifying @code{@value{RPREFIX}FIFO} in attribute_set or selecting +@code{@value{RPREFIX}DEFAULT_ATTRIBUTES} will cause waiting tasks to +be serviced in First In-First Out order. + +The starting_address parameter must be aligned on a +four byte boundary. The page_size parameter must be a multiple +of four greater than or equal to four. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The following region attribute constants are defined +by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority +@end itemize + +@c +@c +@c +@page +@subsection REGION_IDENT - Get ID of a region + +@cindex get ID of a region +@cindex obtain ID of a region + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_ident +@example +rtems_status_code rtems_region_ident( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Ident ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - region identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - region name not found + +@subheading DESCRIPTION: + +This directive obtains the region id associated with +the region name to be acquired. If the region name is not +unique, then the region id will match one of the regions with +that name. However, this region id is not guaranteed to +correspond to the desired region. The region id is used to +access this region in other region manager directives. + +@subheading NOTES: + +This directive will not cause the running task to be preempted. + +@c +@c +@c +@page +@subsection REGION_DELETE - Delete a region + +@cindex delete a region + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_delete +@example +rtems_status_code rtems_region_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - region deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid region id@* +@code{@value{RPREFIX}RESOURCE_IN_USE} - segments still in use + +@subheading DESCRIPTION: + +This directive deletes the region specified by id. +The region cannot be deleted if any of its segments are still +allocated. The RNCB for the deleted region is reclaimed by +RTEMS. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + +The calling task does not have to be the task that +created the region. Any local task that knows the region id can +delete the region. + +@c +@c +@c +@page +@subsection REGION_EXTEND - Add memory to a region + +@cindex add memory to a region +@cindex region, add memory + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_extend +@example +rtems_status_code rtems_region_extend( + rtems_id id, + void *starting_address, + rtems_unsigned32 length +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Extend ( + ID : in RTEMS.ID; + Starting_Address : in RTEMS.Address; + Length : in RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - region extended successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{starting_address} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid region id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - invalid address of area to add + +@subheading DESCRIPTION: + +This directive adds the memory which starts at +starting_address for length bytes to the region specified by id. + +@subheading NOTES: + +This directive will not cause the calling task to be preempted. + +The calling task does not have to be the task that +created the region. Any local task that knows the region id can +extend the region. + +@c +@c +@c +@page +@subsection REGION_GET_SEGMENT - Get segment from a region + +@cindex get segment from region + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_get_segment +@example +rtems_status_code rtems_region_get_segment( + rtems_id id, + rtems_unsigned32 size, + rtems_option option_set, + rtems_interval timeout, + void **segment +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Get_Segment ( + ID : in RTEMS.ID; + Size : in RTEMS.Unsigned32; + Option_Set : in RTEMS.Option; + Timeout : in RTEMS.Interval; + Segment : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - segment obtained successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{segment} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid region id@* +@code{@value{RPREFIX}INVALID_SIZE} - request is for zero bytes or exceeds +the size of maximum segment which is possible for this region@* +@code{@value{RPREFIX}UNSATISFIED} - segment of requested size not available@* +@code{@value{RPREFIX}TIMEOUT} - timed out waiting for segment@* +@code{@value{RPREFIX}OBJECT_WAS_DELETED} - semaphore deleted while waiting + +@subheading DESCRIPTION: + +This directive obtains a variable size segment from +the region specified by id. The address of the allocated +segment is returned in segment. The @code{@value{RPREFIX}WAIT} +and @code{@value{RPREFIX}NO_WAIT} components +of the options parameter are used to specify whether the calling +tasks wish to wait for a segment to become available or return +immediately if no segment is available. For either option, if a +sufficiently sized segment is available, then the segment is +successfully acquired by returning immediately with the +@code{@value{RPREFIX}SUCCESSFUL} status code. + +If the calling task chooses to return immediately and +a segment large enough is not available, then an error code +indicating this fact is returned. If the calling task chooses +to wait for the segment and a segment large enough is not +available, then the calling task is placed on the region's +segment wait queue and blocked. If the region was created with +the @code{@value{RPREFIX}PRIORITY} option, then the calling +task is inserted into the +wait queue according to its priority. However, if the region +was created with the @code{@value{RPREFIX}FIFO} option, then the calling +task is placed at the rear of the wait queue. + +The timeout parameter specifies the maximum interval +that a task is willing to wait to obtain a segment. If timeout +is set to @code{@value{RPREFIX}NO_TIMEOUT}, then the +calling task will wait forever. + +@subheading NOTES: + +The actual length of the allocated segment may be +larger than the requested size because a segment size is always +a multiple of the region's page size. + +The following segment acquisition option constants +are defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for semaphore (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +A clock tick is required to support the timeout functionality of +this directive. + +@c +@c +@c +@page +@subsection REGION_RETURN_SEGMENT - Return segment to a region + +@cindex return segment to region + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_return_segment +@example +rtems_status_code rtems_region_return_segment( + rtems_id id, + void *segment +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Return_Segment ( + ID : in RTEMS.ID; + Segment : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - segment returned successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{segment} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid region id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - segment address not in region + +@subheading DESCRIPTION: + +This directive returns the segment specified by +segment to the region specified by id. The returned segment is +merged with its neighbors to form the largest possible segment. +The first task on the wait queue is examined to determine if its +segment request can now be satisfied. If so, it is given a +segment and unblocked. This process is repeated until the first +task's segment request cannot be satisfied. + +@subheading NOTES: + +This directive will cause the calling task to be +preempted if one or more local tasks are waiting for a segment +and the following conditions exist: + +@itemize @bullet +@item a waiting task has a higher priority than the calling task + +@item the size of the segment required by the waiting task +is less than or equal to the size of the segment returned. +@end itemize + +@c +@c +@c +@page +@subsection REGION_GET_SEGMENT_SIZE - Obtain size of a segment + +@cindex get size of segment + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_region_get_segment_size +@example +rtems_status_code rtems_region_get_segment_size( + rtems_id id, + void *segment, + rtems_unsigned32 *size +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Region_Get_Segment_Size ( + ID : in RTEMS.ID; + Segment : in RTEMS.Address; + Size : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: + +@code{@value{RPREFIX}SUCCESSFUL} - segment obtained successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{segment} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{size} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid region id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - segment address not in region + +@subheading DESCRIPTION: + +This directive obtains the size in bytes of the specified segment. + +@subheading NOTES: + +The actual length of the allocated segment may be +larger than the requested size because a segment size is always +a multiple of the region's page size. + diff --git a/doc/user/rtemsarc.gif b/doc/user/rtemsarc.gif Binary files differnew file mode 100644 index 0000000000..fea62ecb42 --- /dev/null +++ b/doc/user/rtemsarc.gif diff --git a/doc/user/rtemsarc.png b/doc/user/rtemsarc.png Binary files differnew file mode 100644 index 0000000000..13c3b30789 --- /dev/null +++ b/doc/user/rtemsarc.png diff --git a/doc/user/rtemspie.eps b/doc/user/rtemspie.eps new file mode 100644 index 0000000000..ad0eebbb5f --- /dev/null +++ b/doc/user/rtemspie.eps @@ -0,0 +1,2164 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (rtemspie.eps) +%%CreationDate: (Wed Oct 6 10:47:26 1999) +%%BoundingBox: 0 213 495 508 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 213 495 508 +userdict begin +%%BeginData: +DisplayImage +0 213 +495.101124 295.280899 +12 +1787 1066 +1 +0 +0 +256 +000000 +000033 +000066 +000099 +0000cc +0000ff +003300 +003333 +003366 +003399 +0033cc +0033ff +006600 +006633 +006666 +006699 +0066cc +0066ff +009900 +009933 +009966 +009999 +0099cc +0099ff +00cc00 +00cc33 +00cc66 +00cc99 +00cccc +00ccff +00ff00 +00ff33 +00ff66 +00ff99 +00ffcc +00ffff +330000 +330033 +330066 +330099 +3300cc +3300ff +333300 +333333 +333366 +333399 +3333cc +3333ff +336600 +336633 +336666 +336699 +3366cc +3366ff +339900 +339933 +339966 +339999 +3399cc +3399ff +33cc00 +33cc33 +33cc66 +33cc99 +33cccc +33ccff +33ff00 +33ff33 +33ff66 +33ff99 +33ffcc +33ffff +660000 +660033 +660066 +660099 +6600cc +6600ff +663300 +663333 +663366 +663399 +6633cc +6633ff +666600 +666633 +666666 +666699 +6666cc +6666ff +669900 +669933 +669966 +669999 +6699cc +6699ff +66cc00 +66cc33 +66cc66 +66cc99 +66cccc +66ccff +66ff00 +66ff33 +66ff66 +66ff99 +66ffcc +66ffff +990000 +990033 +990066 +990099 +9900cc +9900ff +993300 +993333 +993366 +993399 +9933cc +9933ff +996600 +996633 +996666 +996699 +9966cc +9966ff +999900 +999933 +999966 +999999 +9999cc +9999ff +99cc00 +99cc33 +99cc66 +99cc99 +99cccc +99ccff +99ff00 +99ff33 +99ff66 +99ff99 +99ffcc +99ffff +cc0000 +cc0033 +cc0066 +cc0099 +cc00cc +cc00ff +cc3300 +cc3333 +cc3366 +cc3399 +cc33cc +cc33ff +cc6600 +cc6633 +cc6666 +cc6699 +cc66cc +cc66ff +cc9900 +cc9933 +cc9966 +cc9999 +cc99cc +cc99ff +cccc00 +cccc33 +cccc66 +cccc99 +cccccc +ccccff +ccff00 +ccff33 +ccff66 +ccff99 +ccffcc +ccffff +ff0000 +ff0033 +ff0066 +ff0099 +ff00cc +ff00ff +ff3300 +ff3333 +ff3366 +ff3399 +ff33cc +ff33ff +ff6600 +ff6633 +ff6666 +ff6699 +ff66cc +ff66ff +ff9900 +ff9933 +ff9966 +ff9999 +ff99cc +ff99ff +ffcc00 +ffcc33 +ffcc66 +ffcc99 +ffcccc +ffccff +ffff00 +ffff33 +ffff66 +ffff99 +ffffcc +ffffff +000000 +0d0d0d +1a1a1a +282828 +353535 +434343 +505050 +5d5d5d +6b6b6b +787878 +868686 +939393 +a1a1a1 +aeaeae +bbbbbb +c9c9c9 +d6d6d6 +e4e4e4 +f1f1f1 +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +d7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd75b002dd7ffd7ffd7ffd7ffd7ffd7ff +d7aa0071d7ffd7ffd7ffd7ffd7ffd7ffd772009dd7ffd7ffd7ffd7ffd7ffd7ffd74900c3 +d7ffd7ffd7ffd7ffd7ffd7ffd72700e1d7ffd7ffd7ffd7ffd7ffd7ffd70a00fdd7ffd7ff +d7ffd7ffd7ffd7ef00ff0017d7ffd7ffd7ffd7ffd7ffd7d700ff002dd7ffd7ffd7ffd7ff +d7ffd7c200ff0041d7ffd7ffd7ffd7ffd7ffd7ad0072d7710072d7ffd7ffd7ffd7ffd7ff +d7990065d79d0065d7ffd7ffd7ffd7ffd7ffd789005bd7bf005bd7ffd7ffd7ffd7ffd7ff +d77b0057d7d50057d7ffd7ffd7ffd7ffd7ffd76c0055d7e90055d7ffd7ffd7ffd7ffd7ff +d75d0051d7780000d7850051d7ffd7ffd7ffd7ffd7ffd74f004dd7830000d790004dd7ff +d7ffd7ffd7ffd7ffd7410049d78e0000d79b0049d7ffd7ffd7ffd7ffd7ffd7340044d799 +0000d7a60044d7ffd7ffd7ffd7ffd7ffd728003fd7ffd757003fd7ffd7ffd7ffd7ffd7ff +d71c003cd7ffd769003cd7ffd7ffd7ffd7ffd7ffd710003bd7ffd777003bd7ffd7ffd7ff +d7ffd7ffd704003ad7ffd785003ad7ffd7ffd7ffd7ffd7f80039d7ffd7930039d7ffd7ff +d7ffd7ffd7ed0037d7c90000d7d60037d7ffd7ffd7ffd7ffd7e30035d7d00000d7dd0035 +d7ffd7ffd7ffd7ffd7d90033d7d70000d7e40033d7ffd7ffd7ffd7ffd7cf0031d7de0000 +d7eb0031d7ffd7ffd7ffd7ffd7c40030d7ffd7d90030d7ffd7ffd7ffd7ffd7b9002ed7ff +d7e7002ed7ffd7ffd7ffd7ffd7af002cd7ffd7f5002cd7ffd7ffd7ffd7ffd7a5002ad7ff +d7ffd703002ad7ffd7ffd7ffd7ffd79b0029d7ffd7ffd70f0029d7ffd7ffd7ffd7ffd792 +0029d7ffd7040000d7ffd7110029d7ffd7ffd7ffd7ffd7890029d7ffd7090000d7ffd716 +0029d7ffd7ffd7ffd7ffd7800029d7ffd70d0000d7ffd71a0029d7ffd7ffd7ffd7ffd777 +0029d7ffd7120000d7ffd71f0029d7ffd7ffd7ffd7ffd76e0028d7ffd7ffd73d0028d7ff +d7ffd7ffd7ffd7660028d7ffd7ffd7450028d7ffd7ffd7ffd7ffd75d0028d7ffd7ffd74f +0028d7ffd7ffd7ffd7ffd7540028d7ffd7ffd7570028d7ffd7ffd7ffd7ffd74b0028d7ff +d7ffd7610027d7ffd7ffd7ffd7ffd7430028d7ffd72d0000d7ffd73a0027d7ffd7ffd7ff +d7ffd73b0027d7ffd7320000d7ffd73e0027d7ffd7ffd7ffd7ffd7330027d7ffd7360000 +d7ffd7430026d7ffd7ffd7ffd7ffd72b0026d7ffd73b0000d7ffd7470026d7ffd7ffd7ff +d7ffd7230026d7ffd7ffd78c0026d7ffd7ffd7ffd7ffd71b0026d7ffd7ffd7950025d7ff +d7ffd7ffd7ffd7130025d7ffd7ffd79e0025d7ffd7ffd7ffd7ffd70b0025d7ffd7ffd79c +0000d7080025d7ffd7ffd7ffd7ffd7030025d7ffd7ffd7a00000d70d0024d7ffd7ffd7ff +d7fc0024d7ffd7540000d7ffd74d0000d7120023d7ffd7ffd7ffd7f50024d7010000d7ff +d7550000d7ffd74c0000d7170023d7ffd7ffd7ffd7ee0023d7060000d7ffd7540000d7ff +d7690022d7ffd7ffd7ffd7e70023d70a0000d7ffd7540000d7ffd76d0022d7ffd7ffd7ff +d7e00022d70f0000d7ffd7ffd7c60021d7ffd7ffd7ffd7d90022d7ffd7ffd7b30000d72a +0021d7ffd7ffd7ffd7d20021d7ffd7ffd7b60000d72f0021d7ffd7ffd7ffd7cb0020d7ff +d7ffd7ba0000d7330020d7ffd7ffd7ffd7c40020d7230000d7ffd7ffd7980000d7380020 +d7ffd7ffd7ffd7bd0020d7260000d7ffd74f0000d7ffd7840020d7ffd7ffd7ffd7b60020 +d72b0000d7ffd74e0000d7ffd7880020d7ffd7ffd7ffd7af0020d72f0000d7ffd74d0000 +d7ffd78b0020d7ffd7ffd7ffd7a9001fd7ffd7820000d7ffd78e0020d7ffd7ffd7ffd7a3 +001fd7ffd7ffd7ca0000d74d001fd7ffd7ffd7ffd79d001ed7ffd7ffd7ce0000d750001f +d7ffd7ffd7ffd797001ed7ffd7ffd7d00000d754001fd7ffd7ffd7ffd791001ed7430000 +d7ffd7ffd78d0000d759001ed7ffd7ffd7ffd78a001ed7470000d7ffd7ffd7eb001fd7ff +d7ffd7ffd783001ed74b0000d7ffd7490000d7ffd7a2001fd7ffd7ffd7ffd77d001dd750 +0000d7ffd7480000d7ffd7a6001ed7ffd7ffd7ffd777001dd7ffd79d0000d7ffd7a9001e +d7ffd7ffd7ffd771001dd7ffd7a00000d7ffd73e0000d76c001ed7ffd7ffd7ffd76b001d +d7ffd7ffd7e30000d76f001ed7ffd7ffd7ffd765001dd7ffd7ffd7e50000d773001ed7ff +d7ffd7ffd75f001dd7630000d7ffd7ffd7820000d777001ed7ffd7ffd7ffd75a001cd766 +0000d7ffd7ffd7fe001dd7ffd7ffd7ffd755001cd76a0000d7ffd7ffd7ffd701001cd7ff +d7ffd7ffd74f001cd76e0000d7ffd7420000d7ffd7bf001cd7ffd7ffd7ffd749001cd7ff +d7b50000d7ffd7c2001cd7ffd7ffd7ffd743001cd7e40001d7170001d71f0002d7080001 +d73f0002d7460000d7ffd7390000d78a001cd7ffd7ffd7ffd73e001bd7e60004d7130005 +d71b0004d7070004d73c0004d7450000d7ffd7380000d78e001bd7ffd7ffd7ffd739001b +d77d0000d740000dd71a0005d7130005d7190006d7060005d73b0005d7ffd77f0000d791 +001bd7ffd7ffd7ffd733001bd7800000d7420008d71d0005d7130005d7180007d7060005 +d73b0005d7ffd77e0000d795001bd7ffd7ffd7ffd72d001bd7840000d7430006d71d0005 +d7090001d7070005d7180000d7010004d7060005d7320000d7080004d7ffd7ffd718001b +d7ffd7ffd7ffd728001bd7870000d7430004d7200002d70a0001d7080003d71c0004d707 +0003d7330000d7090003d7ffd7ffd71a001bd7ffd7ffd7ffd723001bd7cf0004d72e0001 +d7290004d73f0000d7ffd7ffd72b001bd7ffd7ffd7ffd71d001bd7d20004d72d0002d729 +0004d73e0001d7530000d7ffd7d9001bd7ffd7ffd7ffd718001ad7d50004d72d0002d729 +0004d73d0002d7530000d7ffd7330000d7a7001ad7ffd7ffd7ffd7140019d7d80004d72c +0003d7290004d73c0003d7530000d7ffd7320000d7ab0019d7ffd7ffd7ffd7100019d799 +0000d73f0004d72a0005d7290004d73b0004d7530000d7a40002d7890000d7ae0019d7ff +d7ffd7ffd70b0019d79c0000d73f0004d7090002d7020004d70c0002d7050009d7060002 +d7080007d70a0004d7090002d7050011d7050006d708000ad7050002d70b0006d70c0002 +d7030004d7bd0004d7ffd73c0019d7ffd7ffd7ffd7060018d7a00000d73e0004d7060005 +d7010007d7070005d703000bd7030005d707000ad7080004d7060005d7050011d704000a +d703000cd7020005d709000ad7070005d7010008d77a0019d7240006d7ffd73f0018d7ff +d7ffd7ffd7020017d7e30004d7040007d7000009d7040007d703000bd7010007d7050005 +d7010005d7070004d7040007d7050010d7030004d7020005d702000cd7000007d7080004 +d7020004d7040007d7000009d77a0019d7230007d7ffd7420017d7ffd7ffd7fd0018d7e5 +0004d7040012d7040007d7060004d7050007d7050003d7040005d7060004d7040007d705 +0002d7070005d7030003d7040004d7060003d7060006d7070004d7030005d7040012d779 +0004d7040005d7050003d7240000d7000004d7ffd7440018d7ffd7ffd7f80017d7e80004 +d7070007d7020005d7060004d7060004d7080004d7040004d7050004d7060004d7070004 +d7050001d7070005d7030003d7060003d7060003d7080004d7060004d7050005d7050007 +d7030005d7780002d7060005d7060002d7260004d7860000d7bf0017d7ffd7ffd7f40016 +d7eb0004d7070005d7050004d7060004d7060004d7080004d7040004d7050004d7060004 +d7070004d7050000d7080004d7040004d7050003d7060003d7090003d7060003d7070004 +d7050005d7060004d7150000d7610001d7070005d7070001d7270003d7850000d7c30016 +d7ffd7ffd7f00016d7b10000d73a0004d7070004d7060004d7060004d7060004d7080004 +d7040004d7060003d7060004d7070004d7050000d7070004d7050004d7050004d7050003 +d7090003d7060003d7070004d7050004d7070004d7150000d7610001d7070005d7070001 +d7270003d7850000d7c50016d7ffd7ffd7eb0016d7b50000d7390004d7070004d7070003 +d7060004d7060004d7080004d7040004d7060003d7060004d7070004d70d0005d7050003 +d7060004d7050003d7090003d7050004d7080004d7040004d7070004d7150000d7610001 +d7070005d7080000d7270003d7840000d7c90016d7ffd7ffd7e60016d7b80000d7380004 +d7070004d7070003d7060004d7060004d7080004d70f0004d7060004d7070004d70c0005 +d7100005d7050003d7090003d7040005d7080004d7040004d7070004d7150000d76b0005 +d7310003d7ffd7510016d7ffd7ffd7e20016d7f40004d7070004d7070003d7060004d706 +0004d7080004d70c0007d7060004d7070004d70c0004d70f0007d7050003d7090003d704 +0005d7080005d7030004d7070004d7820005d7310003d7ffd7530016d7ffd7ffd7de0015 +d7f70004d7070004d7070003d7060004d7060004d7080004d7090005d7000003d7060004 +d7070004d70b0004d70c0005d7000004d7050003d7090003d7040005d7080005d7030004 +d7070004d7820005d70c0007d70b0006d7000001d7060003d7040009d7ffd7470015d7ff +d7ffd7d90016d7f90004d7070004d7070003d7060004d7060004d7080004d7080003d703 +0003d7060004d7070004d70a0005d70b0004d7020004d7050003d7090003d7040005d708 +0005d7030004d7070004d7820005d70b000ad708000ad7060003d7040009d7ffd7490016 +d7ffd7ffd7d40015d7fc0004d7070004d7070003d7060004d7060004d7080004d7070003 +d7040003d7060004d7070004d7090005d70b0003d7040004d7050003d7090003d7040005 +d7090004d7030004d7070004d7820005d70a000cd706000bd7060003d7050004d7750000 +d7d90015d7ffd7ffd7d00015d7c70000d7350004d7070004d7070003d7060004d7060004 +d7080004d7050004d7050003d7060004d7070004d7080005d70b0003d7050004d7050003 +d7090003d7040005d7090004d7030004d7070004d7820005d7090004d7030005d7050002 +d7040003d7060003d7050002d7770000d7db0015d7ffd7ffd7cc0014d7ca0000d7350004 +d7070004d7070003d7060004d7060004d7080004d7040004d7060003d7060004d7070004 +d7080004d70b0003d7060004d7050003d7090003d7040005d7090004d7030004d7070004 +d7150000d76b0005d7080004d7050004d7040003d7050002d7060003d7040002d7770000 +d7df0014d7ffd7ffd7c70015d7cd0000d7340004d7070004d7070003d7060004d7060004 +d7080004d7040003d7070003d7060004d7070004d7070005d7070001d7000004d7060004 +d7050003d7090003d7050005d7080003d7040004d7070004d7150000d76b0005d7080004 +d7050004d7040003d7060001d7060003d7030002d7770000d7e20015d7ffd7ffd7c20015 +d7d00000d7330004d7070004d7070003d7060004d7060004d7080004d7040003d7070003 +d7060004d7070004d7060005d7080001d7000004d7060004d7050003d7090003d7050005 +d7070004d7040004d7070004d7150000d76b0005d7080004d7060003d7040003d7060001 +d7060003d7020001d7ffd75f0015d7ffd7ffd7be0014d7ffd7080004d7070004d7070003 +d7060004d7060004d7080004d7040004d7050004d7060004d7070004d7050005d7090001 +d7000004d7060004d7050003d7090003d7060004d7070003d7050004d7070004d7150000 +d76b0005d7080004d7060003d7040004d7050001d7060003d7010001d7ffd7630014d7ff +d7ffd7b90015d7ffd70a0004d7070004d7070003d7060004d7060004d7010003d7020004 +d7040005d7020006d7010001d7020004d7070004d7050004d7090002d7000005d7020007 +d7000001d7020004d7010002d7030003d7070003d7070003d7050004d7070004d7820005 +d70a0001d7060004d7040006d70c0003d7000001d7ffd7660015d7ffd7ffd7b40014d7ff +d70c0006d7060004d7060005d7050005d7050009d7020005d704000ad7000007d7020004 +d7070005d7030005d7070004d7000013d7020009d7020005d7060005d7040003d7060005 +d7060004d7820005d7100007d7040008d70a0007d7ffd7680014d7ffd7ffd7b00014d7dd +0000d72b000dd700000ad7010009d700000ad7040007d701000ad7010009d7010006d700 +000ad701000ad7000013d7010008d7010006d7030007d701000ad705000bd705000ad701 +000ad77f0005d70e0004d7000003d7060008d7080008d7760000d7f10014d7ffd7ffd7ac +0014d7e00000d72a000dd700000ad7010009d700000ad7040006d702000ad7030006d702 +0004d702000ad701000ad7000013d7020006d7030004d7050006d701000ad7070008d706 +000ad701000ad77f0005d70c0005d7010003d7080007d7070009d7750000d7f30014d7ff +d7ffd7a70015d7e20000d7640001d7140002d7060001d7360002d7060000d70a0001d71b +0001d7a10005d70b0003d7040003d7090007d7060009d7740000d7f60015d7ffd7ffd7a2 +0014d7e60000d7ffd7280000d76b0005d7090004d7050003d70b0005d7060003d7000005 +d7720000d7fa0014d7ffd7ffd79e0014d7ffd7ffd7120000d76b0005d7080004d7060003 +d70d0004d7050003d7010005d7ffd76f0014d7ffd7ffd79a0014d7ffd7ffd7140000d76b +0005d7080003d7070003d7040000d7070004d7050003d7020005d7ffd7700014d7ffd7ff +d7950014d7ffd7ffd7170000d76b0005d7080003d7070003d7040001d7070004d7040003 +d7020005d7ffd7730014d7ffd7ffd7900014d7f30000d7ffd7910005d7080003d7060004 +d7040001d7080003d7040003d7030005d7ffd7740014d7ffd7ffd78c0014d7f50000d7ff +d7910005d7080005d7020006d7010001d7000002d7060003d7040004d7040005d76a0000 +d7ffd7090014d7ffd7ffd7880014d7f80000d7ffd7900005d7080013d7000003d7050002 +d7050004d7050005d7690000d7ffd70b0014d7ffd7ffd7840013d7fc0000d7ffd78b000d +d704000ad7000006d701000bd703000ad7010009d7650000d7ffd70f0013d7ffd7ffd780 +0013d7ffd7ffd7220000d767000dd7060006d7020004d703000ad704000ad7010009d7ff +d7780013d7ffd7ffd77c0013d7ffd7ffd7240000d77d0002d7060001d7050000d7040002 +d7ffd7980013d7ffd7ffd7780013d7ffd7ffd7260000d7ffd7ffd7330013d7ffd7ffd774 +0012d7ffd7080000d7ffd71f0000d7ffd7ffd7360012d7ffd7ffd7700012d7ffd70b0000 +d7ffd71e0000d7ffd7180000d77d0002d7340002d7650012d7ffd7ffd76c0012d7ffd70d +0000d7ffd7ffd7380000d7660007d7030001d7060004d7320004d7670012d7ffd7ffd768 +0012d7ffd7100000d7ffd7ffd7360000d764000cd7010001d7040006d7300006d7690012 +d7ffd7ffd7640012d7ffd7ffd7ffd7490000d7630006d7020008d7030007d72f0007d76b +0012d7ffd7ffd7600012d7ffd7ffd7ffd7af0004d7080005d7030000d7010004d72f0000 +d7000005d76d0012d7ffd7ffd75c0012d7ffd7ffd7350000d7ffd7790004d70b0003d706 +0004d7320004d76f0012d7ffd7ffd7580012d7ffd7ffd7370000d7ffd7780004d70d0002 +d7060004d7320004d7710012d7ffd7ffd7550011d7ffd71e0000d7ffd7190000d7ffd777 +0004d70f0002d7050004d7320004d7730011d7ffd7ffd7520011d7ffd7210000d7ffd718 +0000d7ffd7130000d7620004d70f0002d7050004d7320004d7750011d7ffd7ffd74e0011 +d7ffd7240000d7ffd7170000d7ffd7120000d7620005d7100001d7050004d7320004d777 +0011d7ffd7ffd74a0011d7ffd7ffd7ffd7530000d7620005d7100001d7050004d7320004 +d7790011d7ffd7ffd7460011d7ffd7ffd7ffd7540000d7620005d7110001d7050004d70b +0006d70f0006d7080004d7030009d76d0011d7ffd7ffd7420011d7ffd7ffd7ffd7ba0005 +d7190004d709000ad70c0008d7070004d7030009d76f0011d7ffd7ffd73e0011d7ffd7ff +d7ffd7bc0004d71a0004d708000cd709000cd7050004d7050004d7740011d7ffd7ffd73a +0011d7ffd7310000d7ffd7140000d7ffd7750004d71a0004d7070004d7030004d7080002 +d7040005d7050004d7040003d7780011d7ffd7ffd7360012d7ffd7330000d7ffd7130000 +d7ffd7740005d71a0004d7060004d7050004d7070002d7050005d7040004d7040001d77b +0012d7ffd7ffd7320012d7ffd7360000d7ffd7120000d7ffd70d0000d7650005d71a0004 +d7060003d7070004d7050003d7050005d7040004d7030001d77e0012d7ffd7ffd72e0012 +d7ffd7ffd74c0000d7ffd70d0000d7650005d71a0004d7060003d7070004d7050002d706 +0005d7040004d7020001d7810012d7ffd7ffd72a0012d7ffd7ffd74e0000d7ffd70c0000 +d7660005d71a0004d7050004d7080004d7030003d7080002d7050004d7010001d7840012 +d7ffd7ffd7260012d7ffd7ffd7ffd75d0000d7670005d71a0004d7040005d7080004d703 +0003d7110004d7000001d7870012d7ffd7ffd7220012d7ffd7ffd7ffd7c80005d71a0004 +d7040005d7080005d7010004d7110008d7880012d7ffd7ffd71e0012d7ffd7430000d7ff +d7ffd7850005d71a0004d7040005d7080005d7010004d7110008d78a0012d7ffd7ffd71a +0012d7ffd7460000d7ffd7ffd7850004d71a0004d7040005d7080005d7010004d7110009 +d78b0012d7ffd7ffd7170012d7ffd7470000d7ffd70e0000d7ffd7080000d76b0005d719 +0004d7040005d7090004d7010004d711000ad78b0012d7ffd7ffd7140012d7ffd74a0000 +d7ffd70d0000d7ffd7080000d76b0006d7110000d7050004d7040005d7090004d7010004 +d70b0000d7040004d7000005d78c0012d7ffd7ffd7100012d7ffd7ffd75b0000d7ffd707 +0000d76d0005d7110001d7040004d7040005d7090004d7010005d7090001d7040004d701 +0004d78e0012d7ffd7ffd70d0011d7ffd7ffd75d0000d7ffd7060000d76e0005d7100002 +d7040004d7050004d7090003d7030004d7090001d7040004d7020004d78f0011d7ffd7ff +d70a0011d7ffd7ffd75f0000d7ffd7770005d70e0002d7050004d7050004d7080004d703 +0004d7080002d7040004d7020005d7900011d7ffd7ffd7060014d7ffd7530000d7ffd7ff +d7820006d70c0001d7070004d7060004d7070003d7050005d7050002d7050004d7030005 +d7910010d7ffd7ffd7040016d7ffd7520000d7ffd7ffd7830007d7090002d7070004d706 +0004d7070003d705000ed7050004d7040005d78d0000d7030010d7ffd7ffd700001ad7ff +d7510000d7ffd7ffd70d0000d7740009d7030004d7080005d7060005d7040003d707000c +d7050005d7050005d78b0000d7060010d7ffd7fc001ed7ffd7500000d7ffd7ffd70b0000 +d778000ed706000ad705000bd70a000ad704000ad700000ad7910010d7ffd7fa0021d7b4 +0002d7ffd79f0000d7ffd7020000d77a000ad708000ad7070008d70c0008d705000ad700 +000ad7930010d7ffd7f60010d7000012d75e0017d7390005d70e0018d7ffd7770000d7ff +d7010000d77e0004d7220001d7110003d7a30000d710000fd7ffd7f30011d7020013d75c +0017d7370007d70e0018d7ffd7770000d7ffd7ffd7630001d7120010d7ffd7f00010d706 +0013d75d0014d7370007d7120014d7710000d7ffd7040000d7ffd7ffd7620000d7160010 +d7ffd7ec0011d7090013d75c0005d7090003d71b0000d71d0004d7130004d70a0003d772 +0000d7ffd7030000d7ffd7ffd77b0010d7ffd7e90011d70d0012d75b0005d70a0002d71b +0000d71d0004d7130004d70b0002d7720000d7ffd7ffd7020000d7ffd77e0010d7ffd7e6 +0010d7100013d7590005d70a0002d71a0001d71d0004d7130004d70c0001d7730000d7ff +d7ffd7010000d7ffd75e0000d720000fd7ffd7e30011d7130013d7570005d70b0001d719 +0002d71d0004d7130004d70c0001d7ffd7ffd7750000d7ffd75d0001d7220010d7ffd7df +0011d7170013d7550005d70b0001d7190002d71d0004d7130004d70c0001d7ffd7ffd774 +0000d7ffd75d0000d7260010d7ffd7dc0011d71a0012d7540005d7260003d71d0004d713 +0004d7ffd7860000d7ffd7ffd7830010d7ffd7d90011d71d0013d7520005d7150004d709 +0005d70c0004d70b0004d7130004d7160002d7030001d7050002d7030001d70a0002d70f +0001d7030001d7ffd7310000d7ffd7ffd7850010d7ffd7d60010d7210013d7500005d707 +0001d7090009d705000bd704000ad7080004d7130004d7090001d7080004d7010004d702 +0004d7020003d7070008d7090003d7020004d72f0000d7fe0000d7ffd7ffd7540001d730 +000fd7ffd7d30011d7240013d74e0005d7070001d708000cd702000cd703000cd7070004 +d7130004d7090001d7060006d700000dd7000006d704000ad7070005d7010005d7300000 +d7fd0000d7ffd7ffd7530000d7330010d7ffd7d00010d7280012d74d0005d7070001d707 +0004d7020005d7060003d7070004d7030004d7070004d7130004d7090001d705001ed702 +0004d7030005d7040006d7000007d7300000d7fc0000d7f80000d7ffd7580000d7360010 +d7ffd7cc0011d72a0013d74b0005d7060002d7070002d7060003d7060003d7070003d705 +0004d7060004d7130004d7080002d7050000d700000dd701000cd7020003d7060004d703 +0000d700000cd7ffd7ffd7280000d7ffd7920010d7ffd7ca0010d72e0013d749000fd706 +0003d7060003d7060003d7060004d7050004d7060004d7130010d7080005d7010003d702 +0006d7010003d7020003d7060004d7060005d7010003d7ffd7ffd7270000d7ffd7950010 +d7ffd7c60010d7320013d747000fd7060004d7050004d7050003d7060004d7050004d706 +0004d7130010d7080004d7040000d7030004d7040001d7020003d7080004d7050004d704 +0000d7ffd7ffd7ffd77f0001d73f000fd7ffd7c40010d7350012d7460005d7040004d706 +0003d7060004d7050003d7060004d7050004d7060004d7130004d7060004d7080004d709 +0004d7080004d7080005d7040003d7ffd7ffd7ffd7850000d7420010d7ffd7c00010d738 +0013d7440005d7060002d7070002d7050005d7050003d7070002d7050005d7060004d713 +0004d7080002d7080004d7090004d7080004d7080005d7040003d73c0000d7f90000d7ff +d7ffd74b0000d745000fd7ffd7be0010d73b0013d7420005d7070001d70e0007d7050003 +d70e0007d7060004d7130004d7090001d7080004d7090004d7080004d7080005d7040003 +d73d0000d7f80000d7ffd7ffd7930010d7ffd7ba0010d73f0013d7400005d7070001d70c +0009d7050003d70c0009d7060004d7130004d7090001d7080004d7090004d7070005d709 +0004d7040003d73e0000d7f70000d7f20000d7ffd7520000d74d000fd7ffd7b8000fd743 +0012d73f0005d7070001d70a0004d7010004d7050003d70b0003d7010004d7060004d713 +0004d7090001d7080004d7090004d7070005d7090004d7040003d7ffd7370000d7f10000 +d7ffd7510001d750000fd7ffd7b40010d7460012d73d0005d7120004d7030004d7050003 +d7080005d7020004d7060004d7130004d7140004d7090004d7070005d7090004d7040003 +d7ffd7370000d7f00000d7ffd7510000d7530010d7ffd7b1000fd7490013d73b0005d711 +0003d7050004d7050003d7080003d7040004d7060004d7130004d7140004d7090004d707 +0005d7090004d7040003d7ffd7ffd7ffd7d3000fd7ffd7ae0010d74c0013d7390005d710 +0004d7050004d7050003d7060004d7050004d7060004d7130004d70f0001d7020004d709 +0004d7080004d7090004d7040003d7ffd7ffd7ffd7d40010d7ffd7ab000fd7500012d738 +0005d7100003d7060004d7050003d7060003d7060004d7060004d7130004d70e0002d702 +0004d7090004d7080004d7090004d7040003d7420000d7ffd7ffd7ffd7330000d75d000f +d7ffd7a80010d7530012d7360005d70f0004d7060004d7050003d7050004d7060004d706 +0004d7130004d70d0002d7030004d7090004d7080005d7080004d7040003d7420000d7ff +d7ffd7ffd7310001d75f0010d7ffd7a5000fd7560013d7340005d70f0004d7060004d705 +0004d7040004d7060004d7060004d7130004d70c0003d7030004d7090004d7090004d708 +0003d7050003d7430000d7f20000d7ed0000d7ffd74c0000d763000fd7ffd7a20010d759 +0013d7320005d70f0005d7030006d7010000d7020004d7010008d7040005d7010001d702 +0004d7130004d70c0002d7040004d7090004d7090004d7070003d7060004d7ffd7360000 +d7ed0000d7ffd7b20010d7ffd79f000fd75d0012d7310005d70f0013d7020009d7000013 +d7020004d7120005d70b0003d7040004d7090004d70a0005d7050003d7060004d7ffd736 +0000d7ec0000d7ffd7b5000fd7ffd79d000ed7610012d72e0008d70e0011d7030008d701 +0011d7030006d7100015d7040006d7070006d70a0006d7010004d7050007d7ffd7350000 +d7eb0000d7ffd7490000d76d000ed7ffd79a000fd7630013d729000dd70d0007d7010005 +d7050006d7030008d7010004d702000ad70b0018d702000ad703000ad70a0009d706000a +d7ffd7330000d7ffd7ffd7340001d76f000fd7ffd797000ed7670013d7440004d7040003 +d7070003d7060005d7030003d75d0005d7570000d7ffd7ffd7ffd7230000d773000ed7ff +d795000ed76a0012d7ffd72e0000d7ffd7ffd7ffd799000ed7ffd792000ed76e0012d7ff +d72d0000d7ffd7d70000d7ffd7c1000ed7ffd78f000ed7700013d7ffd72c0000d7ffd7d5 +0000d7ffd7450000d77c000ed7ffd78d000dd7740013d7ffd7ffd7180000d7e70000d7ff +d7440000d77f000dd7ffd78a000ed7770012d7ffd7ffd7170000d7e60000d7ffd7440000 +d781000ed7ffd787000ed77a0012d7ffd7ffd7150000d7ffd7ffd7b0000ed7ffd785000d +d77d0013d7ffd7280000d7e90000d7ffd7ffd7b2000dd7ffd782000ed7800013d7ffd726 +0000d7e90000d7ffd7ffd7260001d78a000ed7ffd77f000ed7830012d7ffd7260000d7ff +d7cc0000d7ffd7410000d78d000ed7ffd77d000dd7870012d7ffd7250000d7ffd7cb0000 +d7ffd7400000d790000dd7ffd77a000ed7890013d7ffd7ffd7ef0000d7ffd7d4000ed7ff +d777000dd78d0013d7ffd7ffd7ec0000d7ffd73d0000d798000dd7ffd775000dd7900012 +d7ffd7ffd7090000d7ffd7ffd71d0001d79a000dd7ffd772000ed7930012d7ffd7220000 +d7e30000d7ffd7ffd71c0000d79d000ed7ffd76f000dd7960013d7ffd7200000d7e30000 +d7ffd7ffd7bd000dd7ffd76d000dd7990013d7ffd71f0000d7e20000d7ffd7ffd7be000d +d7ffd76a000ed79c0012d7ffd71f0000d7e10000d7dd0000d7ffd7380000d7a6000ed7ff +d767000dd7a00012d7ffd7ffd7de0000d7ffd7370001d7a9000dd7ffd765000dd7a20013 +d7ffd7ffd7db0000d7ffd7370000d7ac000dd7ffd763000dd7a50013d7ffd7ffd7ffd7ff +d7c1000dd7ffd760000dd7a90012d7ffd7ffd7ffd7ffd7c2000cd7ffd75e000dd7ac0012 +d7ffd7190000d7de0000d7ffd7ffd70e0001d7b5000dd7ffd75b000dd7af0012d7ffd718 +0000d7dd0000d7ffd7ffd70d0000d7b8000dd7ffd759000cd7b20013d7ffd7170000d7dc +0000d7d70000d7ffd7330000d7bb000cd7ffd756000dd7b50012d7ffd7f40000d7d60000 +d7ffd7f2000cd7ffd754000dd7b80012d7ffd7f20000d7d50000d7ffd7f4000cd7ffd752 +000dd7bb0012d7ffd7ffd7ffd7f90000d7c3000dd7ffd74f000dd7bd0013d7ffd7ffd7ff +d7f60000d7c5000dd7ffd74c000dd7c10012d7ffd7130000d7ffd7ffd7df0000d7c8000c +d7ffd74a000dd7c40012d7ffd7110000d7ffd7ffd7ffd7aa000cd7ffd748000dd7c70012 +d7ffd7100000d7d70000d7d20000d7ffd72c0000d7cf000cd7ffd746000dd7c90013d7ff +d7e70000d7d10000d7ffd72b0001d7d1000dd7ffd742000ed7cc0012d7ffd7e60000d7d0 +0000d7ffd72b0000d7d4000dd7ffd740000dd7d00012d7ffd7e40000d7ffd7ffd7d5000c +d7ffd73e000dd7d30012d7ffd7e20000d7ffd7ffd7d6000cd7ffd73c000dd7d50013d7ff +d70b0000d7ffd7ffd7cd0000d7dd000cd7ffd73a000dd7d80012d7ffd70a0000d7ffd7ff +d7cb0001d7df000dd7ffd736000ed7db0012d7ffd7090000d7ffd7a10000d7ffd7260000 +d7e2000dd7ffd734000dd7df0012d7ffd7080000d7ffd79f0000d7ffd7ffd70d000cd7ff +d732000dd7e10013d7ffd7d90000d7cc0000d7ffd7ffd70e000cd7ffd730000dd7e40012 +d7ffd7d80000d7cb0000d7ffd7230000d7eb000cd7ffd72e000dd7e70012d7ffd7d60000 +d7ffd7ee0001d7ed000dd7ffd72b000dd7ea0012d7ffd7040000d7ce0000d7ffd7ed0000 +d7f0000dd7ffd729000dd7ec0013d7ffd7020000d7ce0000d7ffd7ffd7e0000dd7ffd726 +000dd7f00012d7ffd7020000d7ffd7960000d7ffd7ffd719000cd7ffd724000dd7f30012 +d7ffd7010000d7ffd7950000d7ffd71e0001d7f9000cd7ffd722000dd7f60012d7ffd7ff +d7950000d7ffd71e0000d7fc000dd7ffd71f000dd7f80013d7ffd7ffd7920000d7ffd71e +0000d7fe000dd7ffd71d000dd7fb0012d7ffd7ca0000d7ffd7ffd7e6000dd7ffd71b000d +d7fe0012d7fe0000d7c80000d7ffd7ffd7e7000dd7ffd719000dd7ffd7010012d7fc0000 +d7c80000d7ffd7e00001d7ffd705000dd7ffd716000dd7ffd7040013d7fb0000d7c70000 +d7c20000d7ffd71b0000d7ffd709000dd7ffd713000dd7ffd7070012d7fb0000d7c60000 +d7c20000d7ffd71a0000d7ffd70b000dd7ffd711000dd7ffd70a0012d7ffd7ffd7840000 +d7ffd7ffd729000dd7ffd70f000dd7ffd70d0012d7ffd7ffd7810000d7ffd7170000d7ff +d712000dd7ffd70d000dd7ffd70f0013d7ffd7ffd7ffd7960001d7ffd714000dd7ffd70b +000dd7ffd7120012d7f70000d7ffd7ffd79b0000d7ffd717000dd7ffd709000dd7ffd715 +0012d7f50000d7c30000d7ffd7ffd7f0000dd7ffd707000cd7ffd7190012d7f40000d7c2 +0000d7ffd7ffd7f2000cd7ffd705000cd7ffd71c0012d7f30000d7c10000d7bc0000d7ff +d7130000d7ffd720000cd7ffd703000cd7ffd71e0012d7ffd7b50000d7bc0000d7ffd711 +0001d7ffd722000cd7ffd701000cd7ffd7210012d7ffd7b30000d7bb0000d7ffd7110000 +d7ffd725000cd7ff000cd7ffd7240012d7ffd7ffd7ffd7ffd7a9000cd7fd000cd7ffd727 +0012d7ffd7ffd7ffd7ffd7a8000cd7fb000cd7ffd7290012d7ef0000d7ffd7ffd7880000 +d7ffd72d000cd7fa000bd7ffd72c0012d7ed0000d7ffd7ffd7860001d7ffd72f000bd7f9 +000bd7ffd72f0012d7ec0000d7bc0000d7b70000d7ffd70d0000d7ffd732000bd7f7000b +d7ffd7320012d7ffd7a80000d7b60000d7ffd7ffd743000bd7f5000bd7ffd7340012d7ff +d7a70000d7b50000d7ffd7ffd745000bd7f3000bd7ffd7370012d7ffd7a50000d7ffd7c0 +0001d7ffd73a000bd7f1000bd7ffd73a0012d7ffd7a30000d7ffd7bf0000d7ffd73d000b +d7ef000bd76c0017d7b80012d7e70000d7ffd7ffd7780000d7ffd73f000bd7ed000bd76d +0017d7b90012d7e70000d7ffd7ffd7ffd7b9000bd7eb000bd7710014d7bb0012d7e60000 +d7ffd76a0000d7ffd7ffd74d000bd7e9000bd7730005d70a0002d74b0001d76f0012d7ff +d7ffd74f0000d7ffd7060001d7ffd746000bd7e7000bd7740005d70a0003d74a0001d771 +0012d7ffd79a0000d7b10000d7ffd7050000d7ffd749000bd7e5000bd7750005d70b0002 +d7490002d7720012d7ffd7990000d7b00000d7ffd7050000d7ffd74b000bd7e3000bd776 +0005d70b0002d7490002d7740012d7ffd7970000d7ffd7ffd7ffd705000bd7e1000bd777 +0005d70b0002d7480003d7760012d7e00000d7b30000d7ffd7b20000d7ffd752000bd7df +000bd7780005d7560004d7780012d7de0000d7b30000d7ffd7b00001d7ffd754000bd7dd +000bd7790005d7550005d7790012d7de0000d7ffd7600000d7ffd7010000d7a20002d7b1 +000bd7db000bd77a0005d7090000d705000ad7040006d7060007d70a0001d7030006d704 +000bd7770012d7dd0000d7ffd75f0000d7ffd7870019d7020004d7b1000bd7da000ad77b +0005d7080001d705000ad7040006d7050009d7060004d7020007d704000bd7790012d7ff +d7ffd73b0000d7ffd7880019d7020005d7b1000ad7d9000ad77c0005d7080001d7080005 +d7080002d7060002d7030004d7030006d7010009d7060004d77f0012d7ffd7ffd7380000 +d7fe0000d7890019d7020005d7b2000ad7d7000ad77d0005d7070002d7080005d7080001 +d7060002d7050004d7020013d7050004d7800012d7ffd78b0000d7ffd7a80001d78a0003 +d7060004d7050003d7020004d7b4000ad7d5000ad77e0010d7090004d7080001d7050002 +d7070003d7050005d7050004d7050004d7820012d7d90000d7ae0000d7ffd7a70000d78c +0002d7070004d7070002d7020002d7b6000ad7d3000ad77f0010d7090004d7080001d705 +0002d7070004d7040003d7070004d7050004d7840012d7d80000d7ad0000d7ffd7ffd735 +0001d7080004d7070002d7bd000ad7d1000bd77f0010d70a0004d7060001d7050003d707 +0004d7040003d7070004d7050004d7860012d7d60000d7ad0000d7a70000d7ffd78c0001 +d7080004d7070002d7bd000bd7cf000bd7800005d7070002d70a0004d7060001d7050010 +d7040003d7070004d7050004d7870012d7d60000d7ffd7550000d7f80001d7910001d708 +0004d7080001d7be000bd7cd000bd7810005d7080001d70b0004d7040001d7060011d703 +0003d7070004d7050004d7890012d7ffd7ffd72a0000d7f80000d79e0004d7ca000bd7cb +000bd7820005d7080001d70b0004d7040001d7060003d7110003d7070004d7050004d78b +0012d7ffd7ffd7270000d7f80000d79f0004d7cb000bd7c9000bd7830005d7090000d70b +0005d7020002d7050004d7110003d7070004d7050004d78d0012d7ffd7ffd7ffd7c00004 +d70e0002d7090002d7020005d7050005d70b0008d7090002d7020003d76f000bd7c7000b +d7840005d7170004d7020001d7060004d7110003d7070004d7050004d78e0012d7d30000 +d7ffd7ffd7ea0004d70b0005d7060005d7010007d7030007d709000ad7050005d7010005 +d76f000bd7c6000ad7850005d7170005d7000002d7060004d7110003d7070004d7050004 +d7900012d7d10000d7a80000d7ffd79a0000d7a40004d7090007d7040012d7010009d708 +0003d7000006d7020007d7010005d770000ad7c5000ad7860005d70e0001d7070004d700 +0001d7080003d70b0000d7040003d7070004d7050004d7920012d7d00000d7a70000d7a2 +0000d7f50000d7a50004d70a0006d7040012d700000ad7060003d7040005d7010007d700 +0006d771000ad7c3000ad7870005d70d0002d7070007d7080004d70a0001d7030003d707 +0004d7050004d7940012d7cf0000d7a60000d7a10000d7f50000d7a60004d70c0004d707 +0005d7040007d7040004d7040003d7060004d7040006d7010003d772000ad7c1000ad788 +0005d70d0001d7090005d7090005d7080001d7040003d7070004d7050004d7960011d7ff +d7760000d7a10000d7ffd79d0004d70d0003d7070004d7060004d7060004d7040003d706 +0005d7030005d7030001d774000ad7bf000ad7890005d70c0002d7090005d7090006d706 +0002d7040003d7070004d7050004d7970012d7ffd7ffd7160000d7f10000d7ab0004d70d +0003d7070004d7060004d7060004d7040002d7080004d7030005d77b000ad7bd000bd789 +0005d70b0003d7090005d70a0007d7030003d7040003d7070004d7050004d7020002d793 +0012d7ffd7ffd7ffd7050001d7ac0004d70d0003d7070004d7060004d7060004d7040010 +d7030004d77c000bd7bb000bd78a0005d70a0003d70b0003d70c000dd7050004d7060004 +d7050009d7960012d7ffd7ffd7ffd7020000d7ae0004d70d0003d7070004d7060004d706 +0004d7030011d7030004d77d000bd7b9000bd78a0015d70b0003d70d000bd7050005d706 +0005d7050007d7990011d7cb0000d7ffd7ffd7e40004d70d0003d7070004d7060004d706 +0004d7030003d7110004d77e000bd7b8000ad7880017d70d0001d70f0009d704000ad700 +000ad7030007d79a0012d7c90000d7ffd7ffd7e40004d70d0003d7070004d7060004d706 +0004d7030004d7100004d77f000ad7b7000ad7890017d70d0001d7100006d706000ad700 +000ad7040005d79d0012d7c80000d7a10000d79c0000d7ed0000d7b30004d70d0003d707 +0004d7060004d7060004d7030004d7100004d780000ad7b5000ad7ffd7930012d7ffd769 +0000d79b0000d7ec0001d7b40004d70d0003d7070004d7060004d7060004d7030004d710 +0004d781000ad7b3000ad7ffd7960011d7ffd7680000d79a0000d7ec0000d7b60004d70d +0003d7070004d7060004d7060004d7030004d70b0000d7030004d782000ad7b1000ad7ff +d7980012d7ffd7660000d7ffd7ffd7400004d70d0003d7070004d7060004d7060004d703 +0005d7090001d7030004d783000ad7af000bd7ffd79a0012d7ffd7ffd7ffd7a60004d70d +0003d7070004d7060004d7060004d7040005d7080001d7030004d783000bd7ae000ad7ff +d79d0012d7c30000d7ffd7ffd7220000d7bb0004d70d0003d7070004d7060004d7060004 +d7040005d7080001d7030004d784000ad7ad000ad7ffd7a00011d7c30000d7ffd7ffd71f +0001d7bc0004d70d0003d7070004d7060004d7060004d7040007d7040002d7040004d785 +000ad7ab000ad7ffd7a20012d7c20000d7ffd7340000d7e70000d7bd0005d70d0003d707 +0004d7060004d7060004d705000ed7040004d786000ad7a9000bd7ffd7a40012d7ffd7f5 +0000d7ffd7a70006d70b0005d7050005d7050005d7050006d705000cd7050005d785000b +d7a7000bd7ffd7a70012d7ffd75b0000d7950000d7ffd7a4000dd705000bd700000ad700 +000ad700000ad7040009d704000bd783000bd7a6000ad7ffd7aa0011d7ffd75a0000d7ff +d77a0001d7be000dd705000bd700000ad700000ad700000ad7060006d705000bd784000a +d7a5000ad7020000d7ffd7a80012d7ffd7580000d7ffd7790000d7ffd7aa000ad7a3000b +d7030001d7ffd7a80012d7bc0000d7980000d7ffd7780000d7ffd7ab000bd7a1000bd706 +0000d7ffd7a90012d7bb0000d7ffd7ffd7ffd7bf000bd79f000bd70d0001d7ffd7a40011 +d7bb0000d7ffd7290000d7ffd7ffd794000bd79d000bd7100001d7ffd7a30012d7ffd7e4 +0000d7e00001d7ffd7b2000bd79c000ad7180001d7ffd79e0012d7ffd7e10000d7e00000 +d7ffd7b5000ad79b000bd71a0001d7ffd79e0012d7ffd7de0000d7e00000d7ffd7b6000b +d799000bd7ffd7be0011d7ffd74c0000d7ffd7ffd7ffd72a000bd797000bd7230001d7ff +d79a0012d7b50000d7930000d7ffd76c0000d7ffd7bd000bd796000ad7260001d7ffd79a +0012d7b40000d7920000d7ffd76a0001d7ffd7bf000ad795000bd72d0001d7ffd7950012 +d7b20000d7920000d78c0000d7db0000d7ffd7c1000bd793000bd7300001d7ffd7950011 +d7b20000d7ffd71f0000d7ffd7ffd79f000bd792000ad7380000d7ffd7900012d7ffd7d0 +0000d7ffd7ffd79d0001d701000ad791000ad73a0001d7ffd7900012d7ffd7cd0000d7d8 +0000d7ffd7c20001d704000ad78f000bd73c0000d7ffd7910012d7ffd7ffd7a30001d7ff +d7bc0001d70b000bd78d000bd7430001d7ffd78c0011d7af0000d7ffd7f00000d7ffd7bc +0001d70e000bd78c000ad7460001d7ffd78c0011d7ad0000d78d0000d7ffd7ffd7ffd731 +000ad78b000bd74d0001d7ffd7860012d7ac0000d78c0000d7870000d7ffd7ffd78f0001 +d716000bd789000bd7500001d7ffd7860012d7ab0000d78b0000d7860000d7d40000d7ff +d7b80001d719000bd788000ad7ffd7dc0011d7ffd7370000d7860000d7d20001d7ffd7b3 +0001d720000ad787000ad7590001d7ffd7830011d7ffd7bc0000d7d20000d7ffd7b20002 +d723000ad785000bd75b0001d7ffd7820012d7ffd7ffd7ffd7ffd73d0000d72a000bd784 +000ad7630001d7ffd77d0012d7a70000d7ffd7ffd7ffd7900001d72c000ad783000ad766 +0001d7ffd77d0011d7a70000d7ffd7dc0001d7ffd7ae0001d72f000ad781000bd76d0000 +d7ffd7790011d7a50000d7ffd7db0000d7ffd7aa0001d735000bd77f000bd76f0001d7ff +d7780012d7a40000d7860000d7810000d7ce0000d7ffd7a80002d738000bd77e000ad772 +0000d7ffd7790011d7ffd72b0000d7800000d7ffd7ffd7730001d740000ad77d000bd778 +0001d7ffd7740011d7ffd7290000d77f0000d7cc0000d7ffd7a30002d742000bd77b000b +d77b0001d7ffd7740011d7ffd7270000d7ffd74b0001d7ffd7eb000bd77a000ad7830001 +d7ffd76e0012d7ffd7ffd7710000d7ffd7a00001d74b000ad779000ad7860001d7ffd76e +0011d7a00000d7ffd7ffd7ffd76d0002d74e000ad777000bd7ffd7f90011d79f0000d7ff +d7ffd7ffd7660001d755000bd776000ad78e0001d7ffd76b0011d79e0000d7fe0000d7c7 +0000d7ffd7990002d758000ad775000ad7910001d7ffd76a0012d7ffd79b0000d7c60001 +d7ffd7950000d760000ad774000ad7980001d7ffd7650011d7ffd71d0000d77a0000d7c6 +0000d7ffd7950001d761000ad773000ad79b0001d7ffd7650011d7ffd71b0000d7ffd7ff +d7d70001d764000ad7720009d7a30000d7ffd7610011d7ffd7190000d7ffd7ffd7d10001 +d76b0009d771000ad7a40001d7ffd7600012d7980000d77d0000d7ffd73d0000d7ffd78f +0002d76d000ad76f000ad7a70000d7ffd7610011d7980000d7ffd7b90001d7ffd78a0001 +d775000ad76e000ad7ad0001d7ffd75c0011d7970000d7f30000d7c20000d7ffd7890002 +d777000ad76d000ad7b00001d7ffd75c0011d7ffd7890000d7ffd7ffd7ca000ad76c0009 +d7b80001d7ffd7560012d7ffd7860000d7ffd7ffd7490001d7800009d76b000ad7ba0001 +d7ffd7560011d7ffd7ffd7450001d7ffd7850002d782000ad769000ad7ffd7ffd7160011 +d7ffd70d0000d7ffd7330000d7ffd7810001d78a000ad768000ad7c20001d7ffd7530011 +d7910000d7780000d7ffd7320000d7ffd77f0002d78c000ad767000ad7c50001d7ffd752 +0012d7900000d7770000d7ffd7ffd7ae0000d794000ad7660009d7cd0001d7ffd74d0011 +d78f0000d7770000d7710000d7ffd7ffd7390001d7960009d765000ad7cf0001d7ffd74d +0011d78e0000d7e90000d7ba0000d7ffd77b0001d798000ad7640009d7d70000d7ffd749 +0011d7ffd7760000d7ba0000d7ffd7760001d79f0009d7630009d7d90001d7ffd7480012 +d7ffd7730000d7ba0000d7ffd7740002d7a20009d761000ad7db0000d7ffd7490011d7ff +d7ffd7ffd79e0001d7a9000ad7600009d7e20001d7ffd7440011d78b0000d7ffd79a0000 +d7ffd7700002d7ac0009d75f000ad7e40001d7ffd7440011d7890000d7720000d7ffd724 +0001d7ffd7ffd721000ad75e0009d7ec0001d7ffd73f0011d7880000d7710000d76c0000 +d7b50000d7ffd76d0001d7b40009d75d0009d7ef0001d7ffd73e0011d7880000d7700000 +d76b0000d7ffd7ffd7220002d7b70009d75c0009d7ffd7ffd7320011d7f80000d76b0000 +d7ffd7ffd71c0001d7be0009d75b0009d7f70001d7ffd73b0011d7ffd7620000d7b20000 +d7ffd7660002d7c10009d75a0009d7f90001d7ffd73b0011d7ffd7ffd7120001d7ffd761 +0001d7c80009d7590009d7ffd7010001d7ffd7350011d7840000d7ffd78a0000d7ffd760 +0002d7cb0009d7580008d7ffd7040001d7ffd7350011d7820000d7ffd7ffd7ffd7bc0008 +d7570009d7ffd70b0001d7ffd7300011d7810000d76d000dd7580000d7ffd7ffd70f0001 +d7d30009d7560008d7ffd70e0001d7ffd7300011d7800000d7520042d73d0000d7ae0000 +d7ffd75c0002d7d60008d7550009d7ffd7ffd7420011d7c6005cd72f0000d7ad0001d7ff +d7570001d7dd0009d7540008d7ffd7160001d7ffd72c0011d7ba0070d7240000d7ad0000 +d7ffd7560002d7e00008d7530009d7ffd7180001d7ffd72c0011d7b2007cd7ffd7ffd720 +0000d7e70009d7520008d7ffd7200001d7ffd7270011d77d0000d72a008ad7ffd7ffd717 +0001d7e90008d7510009d7ffd7220001d7ffd7260011d77c0000d7240096d7ba0001d7ff +d7520001d7eb0009d7500008d7ffd72a0000d7ffd7220011d77b0000d71c00a4d7b20000 +d7ffd74e0001d7f20008d74f0009d7ffd72b0001d7ffd7220011d77a0000d71500b0d701 +0000d7a80000d7ffd74c0002d7f40009d74e0008d7ffd72e0000d7ffd7230011d78a0048 +d7280048d7ffd7ee0001d7fc0008d74d0009d7ffd7330001d7ffd71e0011d785003fd742 +003fd7ffd7e70002d7fe0009d74c0008d7ffd7360002d7ffd71d0011d77f0036d75c0036 +d7990001d7ffd7ffd74a0008d74b0009d7ffd73d0001d7ffd7190011d7790030d7700030 +d7940000d7ffd7430001d7ffd7060009d74a0008d7ffd7400002d7ffd7180011d773002e +d77c002ed78f0000d7ffd7410002d7ffd7090008d7490009d7ffd7ffd75d0011d76e002c +d788002cd7ffd7c80001d7ffd7100009d7480008d7ffd7480001d7ffd7150011d7690029 +d7940029d7830000d7ffd73d0002d7ffd7130008d7470009d7ffd74a0002d7ffd7140011 +d7630026d7a20026d77d0001d7ffd7390000d7ffd71a0009d7460008d7ffd7520001d7ff +d7100011d75d0024d7ae0024d7780000d7ffd7390001d7ffd71c0008d7450009d7ffd754 +0002d7ffd70e0011d7590021d7b90022d7ffd7ae0001d7ffd71e0009d7440008d7ffd75c +0000d7ffd70b0011d754001ed7c5001fd7ffd7a50001d7ffd7250008d7430009d7ffd75d +0001d7ffd70b0011d74f001dd7ce001cd76b0000d7ffd7330002d7ffd7270009d7420008 +d7ffd7600001d7ffd70b0011d74a001cd7d6001bd7660001d7ffd72e0001d7ffd72f0008 +d7410009d7ffd7660001d7ffd7060011d746001bd7de001ad7620000d7ffd72d0002d7ff +d7310009d7400008d7ffd7690002d7ffd7050011d740001cd7e4001bd7ffd7ffd7c30008 +d7400008d7ffd7700001d7ffd7010011d73b001cd7ea001cd7ffd7830001d7ffd7390008 +d73f0009d7ffd7720002d7ffd7000011d736001dd7ee001dd7520000d7ffd7290002d7ff +d73b0009d73e0008d7ffd7ffd7790010d733001cd7f4001cd74e0001d7ffd7240001d7ff +d7430008d73d0009d7ffd77a0001d7fd0011d72f001bd7fa001bd74b0000d7ffd7230002 +d7ffd7450009d73c0008d7ffd77d0002d7fc0011d72b0019d7ffd7020019d7ffd7690000 +d7ffd74d0008d73c0008d7ffd7840001d7f80011d7270017d7ffd70a0017d7420000d7ff +d7210001d7ffd74e0008d73b0009d7ffd7860002d7f70010d7230017d7ffd7100017d73d +0001d7ffd7200001d7ffd7500009d73a0008d7ffd78e0000d7f30011d71f0016d7ffd716 +0016d73a0000d7ffd71c0001d7ffd7570008d7390009d7ffd78f0001d7f30011d71a0017 +d7ffd71a0017d7ffd7520002d7ffd7590009d7380009d7ffd7910001d7f30011d7160016 +d7ffd7200016d7310000d7ffd7170001d7ffd7600009d7380008d7ffd7980001d7ef0010 +d7120016d7ffd7260015d72d0001d7ffd7150002d7ffd7630008d7370009d7ffd79a0002 +d7ed0011d70e0016d7ffd72a0015d72a0000d7ffd7ffd77e0009d7360008d7ffd7a20001 +d7e90011d70a0015d7ffd7300014d7ffd73b0001d7ffd76b0008d7350009d7ffd7a40002 +d7e80011d7060015d7ffd7340014d7210000d7ffd7140001d7ffd76d0009d7340009d7ff +d7ffd7920010d7030014d7ffd73a0013d71d0001d7ffd70e0001d7ffd7740009d7340008 +d7ffd7ac0001d7e50026d7ffd73e0013d71a0000d7ffd70e0001d7ffd7770008d7330009 +d7ffd7ae0002d7e40021d7ffd7440012d7ffd7220000d7ffd77e0009d7320009d7ffd7b5 +0001d7e0001dd7ffd7480013d7100000d7ffd70b0001d7ffd77f0009d7310009d7ffd7b8 +0002d7df0019d7ffd74c0013d70c0001d7ffd70b0000d7ffd7820009d7300009d7ffd7bf +0000d7db0016d7ffd7500013d7090000d7ffd7060001d7ffd7880009d7300008d7ffd7c1 +0001d7da0013d7ffd7540013d7ffd70d0001d7ffd78b0008d72f0009d7ffd7c30001d7d7 +0012d7ffd7580012d7ffd7050001d7ffd7920009d72e0009d7ffd7c90001d7cf0012d7ff +d75c0013d7ffd7000001d7ffd7940009d72e0008d7ffd7cc0002d7cb0012d7ffd75e0012 +d7ffd7ffd7980008d72d0009d7ffd7d30001d7c30012d7ffd7620012d7f70001d7ffd79c +0009d72c0009d7ffd7d50002d7bf0011d7ffd7660011d7f40001d7ffd79e0009d72c0008 +d7ffd7ffd7970011d7ffd76a0011d7eb0001d7ffd7a60008d72b0009d7ffd7dd0001d7b5 +0011d7ffd76e0011d7e70001d7ffd7a80009d72a0009d7ffd7df0002d7b10010d7ffd772 +0010d7e00000d7ffd7af0009d72a0008d7ffd7e70001d7a90010d7ffd7760010d7dc0001 +d7ffd7b10008d7290009d7ffd7e90002d7a5000fd7ffd77a000fd7da0000d7d6000cd7cf +0009d7280009d76d0009d7130009d7ffd75a0000d79e000fd7ffd77e000fd7d10001d7df +0006d7d20009d7280008d76e0009d7130009d7ffd75b0001d79a000fd7ffd782000fd7cd +0001d7e10006d7210000d76b0001d7420008d7280008d7700008d7110007d7ffd7600001 +d797000ed7ffd786000ed7c50001d7e90004d7210001d76b0001d7420008d7270009d771 +0007d7110006d7ffd7670001d78f000fd7ffd788000fd7c10001d7eb0004d7210001d76b +0001d7420009d7260009d7720007d70f0007d7ffd7690001d78c000fd7ffd78a000fd7ba +0000d7f20004d7200002d76a0002d7420009d7260008d7730007d70f0007d7ffd7700001 +d784000ed7ffd78e000ed7b70001d7f30004d71f0003d7690003d7430008d7250009d773 +0007d70e0008d7ffd7720001d781000ed7ffd790000ed7b50000d7f50004d71f0003d769 +0003d7430009d7240009d7730008d70d0008d7ffd7780000d77a000fd7ffd792000fd7ac +0001d7fb0004d71e0004d7680004d7430009d7240008d7740008d70c0009d7ffd7790001 +d777000ed7ffd796000ed7a90001d7fd0004d7090002d7030004d706000bd7050008d709 +0002d7020003d7040002d7020003d7000007d7040006d7070002d7020005d706000bd73f +0008d7230009d7740002d7000005d70b0002d7000005d7ffd77b0000d775000ed7ffd798 +000ed7a10001d7ffd7040004d7060005d7010008d703000cd704000ad7060004d7010005 +d7010004d701000dd7040006d7040005d7010008d703000cd73f0009d7220009d7740002 +d7000005d70a0003d7000005d7090008d709000ad706000ad7060009d70c0007d70d0007 +d7ffd70a0001d76e000ed7ffd79a000ed79e0001d7ffd7060004d7040007d7000009d703 +000cd7040003d7000006d7030006d701000cd7010006d7000005d7060004d7020007d700 +000ad702000cd73f0009d7220008d7750002d7010005d7090002d7010005d708000ad707 +000bd705000bd705000cd7080010d705000ad7ffd70a0002d769000ed7ffd79e000ed7ff +d7a50004d7050012d7050004d7080002d7040005d7020006d700000dd7000007d7010004 +d7070003d7020013d7050004d7450008d7210009d7750002d7010005d7090002d7010005 +d7080002d7020005d7050003d7030004d7040003d7030004d7040004d7020005d7070003 +d7040008d7040002d7030005d7ffd7100001d762000ed7ffd7a0000ed7940001d7ffd70d +0004d7070005d7050004d7050004d7070002d7060004d7050005d7010003d7020005d701 +0003d7020004d7070003d7050007d7030005d7040004d7450009d7200009d7750002d702 +0004d7080002d7020005d7060003d7040005d7030003d7050003d7030003d7050003d704 +0003d7050003d7070003d7050006d7040003d7040004d7ffd7120001d75f000dd7ffd7a4 +000dd7910001d7ffd70f0004d7070004d7060004d7050004d7070002d7060005d7040004 +d7030001d7030005d7020002d7020004d7070003d7050005d7050005d7040004d7450009 +d7200008d7760002d7020005d7070002d7020005d7050003d7060004d7030003d7060002 +d7030003d7060002d7030003d7060003d7060003d7060004d7050003d7060003d7ffd772 +000dd7ffd7a8000dd7880001d7ffd7160004d7070004d7060004d7050004d7060002d708 +0004d7040004d7090004d7090004d7070003d7050004d7070004d7040004d7460008d720 +0008d7760002d7030004d7060002d7030005d7050003d7060005d7020003d7060002d703 +0003d7060002d7030004d7050004d7050003d7060004d7050003d7060004d7ffd7170001 +d756000dd7ffd7aa000dd7850001d7ffd7180004d7070004d7070003d7050004d7060010 +d7040003d70a0003d70a0004d7070003d7050004d7070005d7030004d7460008d71f0009 +d7760002d7030005d7050002d7030005d7040003d7070005d7020004d7050002d7030004 +d7050002d7030003d7060004d7040004d7070003d7040003d7070005d7ffd7180001d753 +000cd7ffd7ae000cd77f0000d7ffd71e0004d7070004d7070003d7050004d7050011d704 +0003d70a0003d70a0004d7070003d7050004d7080004d7030004d7460009d71e0009d776 +0002d7040004d7040002d7040005d7040011d7020005d7050001d7030005d7050001d704 +0002d7050005d7040004d7070003d7040011d7ffd71e0001d74c000cd7ffd7b0000cd77c +0001d7ffd71f0004d7070004d7070003d7050004d7050003d7120003d70a0003d70a0004 +d7070003d7050004d7080004d7030004d7460009d71e0008d7770002d7040004d7040002 +d7040005d7040011d7030006d70a0006d7110007d7040004d7070003d7040011d7ffd720 +0002d748000cd7ffd7b2000cd7790001d7ffd7210004d7070004d7070003d7050004d705 +0004d7110003d70a0003d70a0004d7070003d7050004d7080004d7030004d7470008d71e +0008d7770002d7040005d7020003d7040005d7040003d7110009d7070009d70c0009d704 +0004d7070003d7040003d7ffd7350000d742000cd7ffd7b4000cd7720001d7ffd7270004 +d7070004d7070003d7050004d7050004d7110003d70a0003d70a0004d7070003d7050004 +d7080004d7030004d7470008d71d0009d7770002d7050004d7020002d7050005d7040003 +d7130009d7070009d7080004d7010004d7050003d7060004d7040003d7ffd7360001d73f +000cd7ffd7b6000bd7700001d7ffd7290004d7070004d7070003d7050004d7050004d711 +0003d70a0003d70a0004d7070003d7050004d7080004d7030004d7470008d71d0009d777 +0002d7050005d7000003d7050005d7040003d7140008d7080008d7060004d7030004d705 +0004d7050003d7050003d7ffd7380000d73d000cd7ffd7b8000bd7680001d7ffd7300004 +d7070004d7070003d7050004d7050004d70b0000d7040003d70a0003d70a0004d7070003 +d7050004d7080004d7030004d7470009d71c0008d7780002d7060004d7000002d7060005 +d7040004d7160006d70a0006d7040004d7040004d7060004d7030003d7060004d7ffd73c +0001d736000cd7ffd7ba000bd7650001d7ffd7320004d7070004d7070003d7050004d705 +0005d7090001d7040003d70a0003d70a0004d7070003d7050004d7080004d7030004d748 +0008d71c0008d7780002d7060008d7060005d7040004d70b0000d70a0006d70a0006d703 +0003d7050004d707000ad7070004d70a0000d7ffd7320001d733000cd7ffd7bc000bd7ff +d7990004d7070004d7070003d7050004d7060005d7080001d7040003d70a0003d70a0004 +d7070003d7050004d7080003d7040004d7480008d71b0009d7780002d7070006d7070005 +d7040005d7090001d7020001d7070004d7020001d7070004d7020003d7060004d7070008 +d7090004d70a0001d7ffd7380001d72b000cd7ffd7be000bd75d0001d7ffd7380004d707 +0004d7070003d7050004d7060005d7080001d7040003d70a0003d70a0004d7070003d705 +0004d7080003d7040004d7480008d71b0009d7780002d7070006d7070005d7040006d707 +0002d7020001d7070004d7020001d7070004d7010004d7060004d7060002d7100006d707 +0002d7ffd73a0001d728000cd7ffd7c0000bd75a0001d7ffd73a0004d7070004d7070003 +d7050004d7030001d7010006d7040003d7040003d70a0003d70a0005d7040006d7040004 +d7080003d7040004d7030001d7420008d71b0008d7790002d7080004d7080005d7040007 +d7060002d7020001d7080003d7020001d7080003d7010004d7060004d7050002d7110007 +d7060002d7ffd765000ad7ffd7c3000bd7530001d7ffd7400004d7070004d7070004d705 +0004d7000002d702000ed7050003d70a0004d70a0005d7010008d7000000d7020005d706 +0003d7050005d7000002d7440007d71b0008d7790002d7080004d7080005d7050007d704 +0002d7030002d7070003d7020002d7070003d7010004d7040006d7010000d7010005d710 +0007d7030003d7ffd7410001d721000ad7ffd7c5000bd7500001d7ffd7410006d7060005 +d7050005d7050008d703000cd7050005d7080005d70a000ad7000007d7010006d7040003 +d7060009d7440008d71a0008d7790002d7090002d7090005d707000cd7040003d7050003 +d7030003d7050003d7020013d7010011d705000dd7ffd7440001d71e000ad7ffd7c7000b +d7490000d7ffd745000cd700000ad701000ad7020007d705000ad704000ad703000ad708 +0008d7010005d703000ed7080007d7450008d7190009d7780004d7080002d7080007d706 +000cd7040004d7030004d7030004d7030004d7030012d7010012d705000bd7ffd74b0001 +d717000ad7ffd7c9000bd7460001d7ffd746000cd700000ad701000ad7030005d7080006 +d706000ad703000ad7080006d7030002d706000cd70b0005d7460008d7190008d776000a +d7060000d706000dd7040009d706000cd704000cd7050007d7010006d7030012d7050009 +d7ffd74e0002d713000bd7ffd7ca000bd7440000d7ffd7c70004d7610007d7190008d776 +000ad7060000d706000dd7060006d7070009d7070009d7090005d7030004d7050012d705 +0007d7ffd7560000d70d000bd7ffd7cc000bd73d0001d7ffd7cc0004d7610007d7190008 +d7ee0001d70d0003d7ffd7650001d70a000bd7ffd7cd000cd73a0001d7ffd7ce0004d761 +0008d7170009d7ed0002d70e0001d7ffd7680000d709000ad7ffd7cf000bd7340001d7ff +d7d40004d7610008d7170008d7ed0003d70d0002d7ffd76d0001d702000bd7ffd7d0000b +d7300002d7ffd7d60004d7620007d7170008d7ed0003d70d0002d7ffd76f000dd7ffd7d2 +000bd7ffd7ffd7090004d7620007d7170008d7ed0006d7080003d7ffd771000bd7ffd7d4 +000bd7280001d7ffd7dd0004d7620007d7160009d7ed0012d7ffd771000bd7ffd7d6000b +d7250001d7ffd7dc000ad75f0008d7150008d7ef000fd7ffd773000bd7ffd7d6000bd71f +0001d7ffd7e2000ad7600007d7150008d7f1000cd7ffd773000bd7ffd7d8000bd71c0001 +d7ffd7ffd7500007d7150008d7f50005d7ffd776000ad7ffd7da000ad7160000d7ffd7ff +d7570007d7150008d7ffd7ffd771000ad7ffd7dc000ad7130001d7ffd7ffd7580007d715 +0008d7ffd7ffd7710009d7ffd7de0009d7120000d7ffd7ffd75a0007d7150008d7ffd7ff +d7700009d7ffd7e00009d70b0001d7ffd7ffd75f0008d7130009d7ffd7ffd76f000ad7ff +d7e0000ad7080001d7ffd7ffd7610008d7130008d7ffd7ffd7700009d7ffd7e20009d702 +0001d7ffd7ffd7680007d7130008d7ffd7ffd76f0009d7ffd7e4000bd7ffd7ffd76a0007 +d7130008d7ffd7ffd76e0009d7ffd7480003d7090001d78d0009d7ffd7ffd76b0007d713 +0008d7ffd7ffd76d0009d79e0012d7100020d702001ed708000bd71a000ad704000bd704 +0002d78e0009d7ffd7ffd76a0007d7130008d7ffd7ffd76d0009d79d0015d70e0020d702 +001ed708000bd719000bd703000ed7010003d78e0009d7ffd7ffd76a0008d7120008d7ff +d7ffd76c0009d7a00015d70b0020d705001bd70a000ad718000ad7040014d7900009d7ff +d7ffd7690008d7120008d7ffd7ffd76c0009d7a20014d70a0020d7070019d70d0007d718 +0007d7060005d7050009d7900009d7ffd7ffd7690008d7110009d7ffd7ffd76b0009d7a3 +0007d7060006d7090006d7060005d7070004d7080006d70b0005d70e0006d7170007d706 +0005d7090006d7910009d7ffd7ffd7680008d7110008d7ffd7ffd76c0009d7a30006d707 +0006d7090004d7070005d7090003d7080005d70d0004d70e0007d7150008d7060004d70a +0006d7910009d7ffd7ffd7690007d7110008d7ffd7ffd76b0009d7a40006d7080006d707 +0004d7080005d7090002d7080006d70e0002d70e0008d7140008d7060005d70b0005d792 +0009d7ffd7ffd7680008d7100008d7ffd7ffd76b0009d7a40006d7080006d7070002d70a +0005d7090002d7080006d70e0002d70e0008d7140008d7060004d70d0003d7930009d7ff +d7ffd7680008d7100008d7ffd7ffd76a0009d7a50006d7080006d7070002d7090006d709 +0002d7080006d70e0002d70e0008d7130009d7050005d70d0003d7940009d7ffd7ffd767 +0009d70f0008d7ffd7ffd76a0009d7a50005d70a0006d7060002d7090005d70a0002d708 +0005d70f0001d70f0008d7120009d7060005d70d0003d7940009d7ffd7ffd7670009d70f +0008d7ffd7ffd7690009d7a60005d70a0006d7050002d7090006d70a0001d7090005d70f +0001d70e0009d711000ad7060005d70e0002d7950009d7ffd7ffd7660009d70f0008d7ff +d7ffd7690009d7a50006d7090006d7060002d7090006d70a0001d7080006d7200009d710 +000bd7060006d70d0001d7960009d7ffd7ffd766000ad70d0009d7ffd7ffd7680009d7a6 +0006d7090006d7130006d7150006d7200009d7100003d7000005d7070006d70c0002d797 +0009d7ffd7ffd765000ad70d0008d7ffd7ffd7690009d7a50006d70a0006d7120006d715 +0006d7090001d7140003d7000006d70e000bd7070007d70b0002d7970009d7ffd7ffd766 +0009d70d0008d7ffd7ffd7680009d7a60006d7090006d7130006d7150006d7080002d714 +0003d7000006d70d0004d7000006d7080007d7a60009d7ffd7ffd7650009d70d0008d7ff +d7ffd7680009d7a60006d7090006d7130006d7150006d7070003d7130004d7000006d70d +000cd7090006d7a60009d7ffd7ffd765000ad70c0008d7ffd7ffd7680008d7a70006d709 +0006d7130006d7150006d7070003d7130004d7000006d70c0004d7000007d7090007d7a6 +0008d7ffd7ffd765000ad70c0008d7ffd7ffd7670009d7a60006d7080007d7140005d715 +0006d7080002d7140003d7010006d70c0004d7000006d70b0007d7a50009d7ffd7ffd764 +000ad70c0008d7ffd7ffd7670008d7a70006d7060007d7150006d7150006d7050005d713 +0004d7010006d70b0004d7000007d70b0008d7a50008d7ffd7ffd764000ad70c0008d7ff +d7ffd7660009d7a70007d701000ad7160006d7150012d7130004d7010006d70a0004d701 +0007d70c0008d7a40009d7ffd7ffd763000ad70c0008d7ffd7ffd7660009d7a70013d717 +0006d7140012d7140003d7020006d70a0003d7020007d70d0008d7a30009d7ffd7ffd763 +000ad70c0008d7ffd7ffd7660008d7a70010d71b0005d7150012d7140003d7030005d709 +0004d7020006d70f0008d7a30008d7ffd7ffd763000bd70b0008d7ffd7ffd7660008d7a7 +000fd71b0006d7150005d7060005d7130004d7030006d7070004d7020007d7100008d7a2 +0008d7ffd7ffd763000bd70b0008d7ffd7ffd7650009d7a70005d7030006d71a0006d714 +0005d7080004d7130003d7040006d7070003d7030007d7110008d7a10009d7ffd7ffd762 +000bd70b0008d7ffd7ffd7650009d7a70005d7040005d71a0005d7150005d7090002d714 +0003d7040006d7060003d7040006d7130008d7a00009d7ffd7ffd762000bd70b0008d7ff +d7ffd7650008d7a70006d7040005d71a0005d7150005d7090002d7140003d7040006d705 +0004d7040006d7130008d7a10008d7ffd7ffd762000cd70a0008d7ffd7ffd7650008d7a7 +0006d7040006d7180006d7150005d7090002d7130004d7040006d7040004d7040007d714 +0008d7a00008d7ffd7ffd762000cd70a0008d7ffd7ffd7640009d7a70005d7050006d718 +0005d7150005d70a0001d7140003d7050006d7040003d7050006d7160008d79f0009d7ff +d7ffd761000cd70a0008d7ffd7ffd7640008d7a80005d7060005d7180005d7150005d70a +0001d7140003d7050006d7030003d7060006d7070001d70d0007d7a00008d7ffd7ffd761 +000cd70a0008d7ffd7ffd7640008d7a70006d7060006d7170005d7150005d7210003d705 +0006d7020004d7060006d7070000d70f0006d7a00008d7ffd7ffd761000dd7090008d7ff +d7ffd7640008d7a70005d7070006d7160006d7140005d7140001d70a0003d7070006d701 +0003d7060007d7060001d70f0006d7a00008d7ffd7ffd761000dd7080008d7ffd7ffd764 +0009d7a70005d7080005d7160005d7150005d7130002d70a0003d7070006d7000003d707 +0006d7070001d70f0006d7a00009d7ffd7ffd761000cd7080008d7ffd7ffd7640008d7a8 +0005d7080006d7150005d7150005d7120002d70b0003d707000ad7080006d7070001d710 +0005d7a10008d7ffd7ffd761000cd7080008d7ffd7ffd7640008d7a70006d7080006d715 +0005d7140006d7120002d70b0002d708000ad7080006d7070002d70f0005d7a10008d7ff +d7ffd761000dd7070008d7ffd7ffd7640008d7a70005d70a0005d7140005d7150005d712 +0003d70a0003d7080009d7090005d7070003d70f0005d7a10008d7ffd7ffd761000dd707 +0008d7ffd7ffd7640008d7a60006d70a0006d7130005d7150005d7110003d70b0003d708 +0008d70a0005d7070003d70f0004d7a20008d7ffd7ffd761000dd7070008d7ffd7ffd764 +0008d7a60006d70a0006d7120006d7150005d7100004d70b0003d7080007d70a0005d708 +0003d70e0005d7a20008d7ffd7ffd761000dd7070008d7ffd7ffd7630009d7a60006d70a +0007d7110006d7150005d70f0005d70b0002d7090007d7090006d7080004d70d0005d7a2 +0009d7ffd7ffd760000ed7060008d7ffd7ffd7630008d7a60006d70c0007d7100005d715 +0006d70c0007d70b0003d70a0005d70a0006d7070006d70b0005d7a40008d7ffd7ffd760 +000ed7060008d7ffd7ffd7630008d7a50008d70b0007d70f0007d7130008d708000ad70a +0004d70a0004d70a0007d7070008d7090004d7a50008d7ffd7ffd760000ed7060008d7ff +d7ffd7630008d7a4000ad70a0009d70b000ad711001dd7090007d7080003d70a0009d706 +000ad7040005d7a70008d7ffd7ffd760000ed7060008d7ffd7ffd7630008d7a10010d708 +000bd7050011d70a001fd706000ed7050003d7060011d7020014d7a80008d7ffd7ffd760 +000ed7060008d7ffd7ffd7630008d7a1000fd709000bd7040012d70a001fd706000ed705 +0002d7070011d7010002d705000ad7aa0008d7ffd7ffd760000fd7050008d7ffd7ffd763 +0008d7ffd7450001d70a0003d7ad0008d7ffd7ffd760000fd7050009d7040003d7040003 +d7040003d7040003d7040003d7040003d7040003d7040003d7040003d7040003d7040003 +d7040003d7040003d7040003d7040003d7040003d7040003d7040003d7030004d7030004 +d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004 +d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004 +d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004d7030004 +d7030004d7030004d7030004d7030003d7040003d7040003d7040003d7040003d7040003 +d7040003d7040003d7040003d7040003d7040003d7040003d7040003d7040003d7040003 +d7040003d7040003d704000cd7ffd7ffd7040008d7ffd7ffd760000fd7050008d7ffd7ff +d7630008d7ffd7ffd7040008d7ffd7ffd760000fd7050008d7ffd7ffd7630008d7ffd7ff +d7040008d7ffd7ffd760000fd7050008d7ffd7ffd7630008d7ffd7ffd7040008d7ffd7ff +d7600010d7040008d7ffd7ffd7630008d7ffd7ffd7040008d7ffd7ffd7600010d7040008 +d7ffd7ffd7630008d7ffd7ffd70400ff00ff007ad7040008d7ffd7ffd7630008d7ffd7ff +d70400ff00ff007ad7040008d7ffd7ffd7630008d7ffd7ffd70400ff00ff007ad7040008 +d7ffd7ffd7630008d7ffd7ffd70400ff00ff007ad7040008d7ffd7ffd7630008d7ffd7ff +d70400ff00ff007bd7030008d7ffd7ffd7630008d7ffd7ffd70400ff00ff007bd7030008 +d7ffd7ffd7630008d7ffd7ffd70400ff00ff007bd7030008d7ffd7ffd7630008d7ffd7ff +d70400ff00ff007bd7040008d7ffd7ffd7620008d7ffd7ffd70400ff00ff007bd7040008 +d7ffd7ffd7620008d7ffd7ffd70400ff00ff007bd7040008d7ffd7ffd7620009d7ffd7ff +d702000cd7ffd7ffd75c0008d7000008d7040008d7ffd7ffd7630008d7ffd7ffd702000c +d7ffd7ffd75c0008d7000008d7040008d7ffd7ffd7630008d7ffd7ffd702000cd7ffd7ff +d75c0008d7000009d7030008d7ffd7ffd7630008d7de0009d7060001d7ffd710000cd7ff +d7ffd75c0008d7010008d7030008d7ffd7ffd7630008d7da0011d7000003d7ffd710000d +d7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7630009d7d60019d7ffd70f000ed7ff +d7ffd75b0008d7010008d7030008d7ffd7ffd7630009d7d50007d7080008d7ffd710000e +d7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7640008d7d30006d70d0006d7ffd710 +000ed7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7640008d7d20006d70f0005d7ff +d710000ed7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7640009d7d10005d7110004 +d7ffd70f000fd7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7640009d7cf0006d712 +0003d7ffd710000fd7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7650008d7ce0006 +d7130003d7ffd710000fd7ffd7ffd75b0008d7010008d7030008d7ffd7ffd7650009d7cc +0006d7150002d7ffd70f0011d7ffd7ffd75a0008d7010008d7030008d7ffd7ffd7650009 +d7cc0005d7160002d7ffd70f0011d7ffd7ffd75a0008d7010008d7030008d7ffd7ffd766 +0008d7cb0006d7160001d7ffd7100011d7ffd7ffd75a0008d7020007d7030009d7ffd7ff +d7650008d7ca0006d7170001d7ffd7100011d7ffd7ffd7590008d7030007d7040008d7ff +d7ffd7650009d7c90006d7170001d7ffd70f0012d7ffd7ffd7590008d7030007d7040008 +d7ffd7ffd7650009d7c80006d72d0002d7140002d7060001d7110002d7c30012d7ffd7ff +d7590008d7030007d7040008d7ffd7ffd7650009d7c80006d7290009d70b0008d7050004 +d70a000ad7c00012d7ffd7ffd7590008d7030007d7040008d7ffd7ffd765000ad7c60006 +d727000dd707000ad7040006d708000dd7be0012d7ffd7ffd75a0008d7030007d7040008 +d7ffd7ffd765000ad7c60006d7260004d7050004d7070009d7030007d7070004d7040005 +d7bd0012d7ffd7ffd75a0008d7030007d7040008d7ffd7ffd765000bd7c40006d7260004 +d7070003d70b0005d7030007d7060003d7060005d7bc0009d7000008d7ffd7ffd75a0007 +d7040007d7040008d7ffd7ffd765000bd7c40006d7240005d7080004d70a0005d7020008 +d7040004d7070005d7bc0009d7000008d7ffd7ffd75a0007d7040007d7040009d7ffd7ff +d764000cd7c20007d7230005d70a0004d7090004d7020002d7000005d7030004d7080005 +d7bb0009d7010008d7ffd7ffd7590008d7040007d7050008d7ffd7ffd764000cd7c20006 +d7240005d70a0004d7090004d7020001d7020003d7030004d7090004d7bc0009d7010008 +d7ffd7ffd7590008d7040008d7040008d7ffd7ffd765000bd7c20006d7230005d70b0004 +d7090004d7010001d7030002d7030005d7090004d7bc0008d7020008d7ffd7ffd7590008 +d7040008d7040008d7ffd7ffd765000cd7c10006d7220005d70c0004d7080005d7000001 +d70b0004d7080006d7bb0009d7010009d7ffd7ffd7590008d7040008d7040008d7ffd7ff +d765000cd7c10006d7210006d70b0006d7070004d7000002d70a0005d7070006d7bc0008 +d7020008d7ffd7ffd75a0007d7050008d7040008d7ffd7ffd765000dd7c00006d7210005 +d70c0006d7060008d70b0004d7070005d7bd0009d7020008d7ffd7ffd75a0007d7050008 +d7040008d7ffd7ffd766000cd7c00006d7200006d70c0006d7060007d70c0004d7050006 +d7be0008d7030008d7ffd7ffd75a0007d7050008d7040008d7ffd7ffd766000dd7bf0006 +d7200006d70c0006d7060006d70c0005d7030007d7be0009d7030008d7ffd7ffd75a0007 +d7050008d7040009d7ffd7ffd765000dd7bf0006d71f0006d70d0005d7070006d70c0004 +d7010008d7c00008d7040008d7fc0002d7810002d7d40008d7050008d7050008d7ffd7ff +d765000ed7be0006d71f0006d70d0005d7060006d70c000dd7c20009d7040008d7fa0004 +d77f0004d7d40008d7050008d7050008d7ffd7ffd765000ed7be0006d71f0006d70d0005 +d7060006d70c000ad7c50008d7040008d7ab0014d7380006d70f0010d75c0006d70d0009 +d7140009d79d0007d7060008d7050008d7ffd7ffd765000fd7bd0006d71f0005d70d0006 +d7060005d70c0005d7ca0009d7040008d7ae0015d7330007d712000fd7590007d70f0007 +d7140006d7a00007d7060008d7050008d7f20002d7ffd770000fd7bc0007d71e0005d70d +0005d7070005d70c0005d7c90009d7050008d7af0005d7070007d7350004d7130005d703 +0006d7300000d7280004d7110006d7120006d7a10007d7060008d7050008d7790006d703 +0001d7690004d7ffd76c0002d700000fd7bd0006d7160002d7040005d70c0005d7070005 +d70d0005d7c90009d7050008d7af0005d7090006d7350003d7130005d7040006d72f0000 +d7280004d7120005d7120006d7a10007d7060008d7050008d776000fd7670006d7ffd763 +0002d7030001d7030010d7bc0006d7150003d7040005d70c0005d7070005d70d0005d7c8 +0009d7060007d7b00005d70a0006d7340003d7130005d7050006d72d0001d7280004d712 +0006d7100006d7a20007d7060008d7050009d7740004d7040006d7670006d7ffd7620000 +d70c0011d7bc0006d7140002d7050005d70b0005d7080005d70d0005d70e0001d7b60009 +d7060008d7b00005d70b0005d7340003d7130005d7060005d72c0002d7280004d7120006 +d7100006d7a10008d7060008d7060008d7740004d7060004d7690004d7ffd75b0002d711 +0012d7bb0006d7120003d7060005d70a0006d7080004d70e0006d70c0003d7b40009d707 +0008d7b00005d70c0005d7330003d7130005d7070004d72c0002d7280004d7120007d70e +0007d7a10007d7070008d7060008d7740003d7080003d76a0003d7ffd75a0000d7140012 +d7bc0006d7100003d7070005d70a0005d7080005d70f0005d70a0003d7b60009d7060009 +d7b00005d70d0004d7330003d7130005d7070005d72a0003d7280004d7120007d70e0007 +d7a10007d7070008d7060008d7730003d70a0002d76a0003d7ffd7520002d71b0012d7bc +0007d70e0002d7080005d7090005d7090004d7100006d7080003d7b60009d7070008d7b1 +0005d70d0005d7320003d7130005d7070005d7290004d7280004d7120002d7000004d70c +0002d7000004d7a10007d7070008d7060009d7710004d70a0002d76a0003d7ffd7510000 +d71e0013d7bc0007d70b0003d70a0005d7070005d70a0004d7110008d7020005d7b60009 +d7070009d7b10005d70e0004d7020007d7040006d7080006d70b0003d7130005d7070005 +d7080006d70c0002d7010003d702000ad7070005d70e0005d7000004d7120002d7000004 +d70c0002d7000004d70b0005d70b0002d7030004d7070003d70e0006d70c0001d7020003 +d700000ad7030007d7260008d7070008d7070008d7710005d70a0001d76a0003d7ffd74a +0002d7230014d7bc0014d70d0005d7040005d70c0004d711000fd7b7000ad7070009d7b1 +0005d70e0005d7010007d7040006d707000ad7080003d7130005d7070005d706000ad707 +0005d7000012d704000ad70a000dd7120002d7010004d70a0002d7010004d709000ad705 +0005d7010008d7020008d70a000ad7070004d7010010d7030007d7260008d7060008d708 +0008d7710005d70a0001d76a0003d7ffd7490000d7260009d700000ad7bd0011d710000c +d70d0004d714000cd7b7000ad7080009d7b10005d70e0005d7030005d7060004d7050004 +d7010006d7070003d7130005d7070004d7060004d7010005d7040007d7000012d7040003 +d7000006d7080003d7010008d7120002d7010004d70a0002d7010004d7080003d7010006 +d7020007d700000ad7000009d7090004d7010005d7040006d7010006d7000005d7090002 +d7280007d7070008d7080008d7710005d70a0001d76a0003d7ffd7420002d72c0014d7be +000ed7130009d70f0004d7150009d7b9000ad7070009d7b20005d70e0006d7030004d707 +0003d7040003d7050004d7070003d7130005d7060005d7050004d7030004d704000fd701 +0004d7080002d7040004d7070003d7040006d7120002d7020004d7080002d7020004d707 +0003d7040004d7030006d7000016d7070003d7040004d7040006d7000007d7010004d709 +0001d7290007d7070008d7080009d7700006d7090001d7090008d70a0002d7020005d705 +0005d70b0007d70a0002d7020006d7080003d7030005d70c0007d70b0002d7020003d706 +0008d7f40002d7030001d72f0009d700000ad7c20007d7170005d72e0004d7bb000ad708 +0009d7b20005d70e0006d7030004d7070003d7040003d7060003d7070003d7130005d705 +0005d7050004d7050004d7060006d7000004d7010004d7070002d7060004d7050003d706 +0005d7120002d7020004d7080002d7020004d7060003d7060004d7040007d7030007d703 +0004d7060003d7060004d706000cd7010005d7070002d7280008d7070008d7090008d771 +0007d712000ad7060005d7010007d7030007d709000ad7060004d7010008d7070003d701 +0008d709000ad7080004d7010005d704000ad7f20000d7390015d7ffd7d6000bd707000a +d7b20005d70f0005d7030004d7070003d7040003d7060003d7070003d7130005d7030006 +d7050004d7070004d7050005d7020002d7020004d7070002d7060005d7030004d7070004 +d7120002d7030004d7060002d7030004d7060003d7060004d7040005d7050005d7060003 +d7050004d7070004d7050005d7020002d7030004d7070002d7280008d7070008d7090008 +d7720008d7100003d7000006d7030012d7010009d7060004d7020005d7030006d700000a +d7060003d700000ad7070005d7010005d7040006d7010006d7030002d7010006d7ea0002 +d73e0009d700000bd7ffd7d4000bd7080009d7b30005d70f0005d7030004d7070003d704 +0003d7060003d7070003d713000fd7060004d7070004d7050004d7090004d7060002d708 +0004d7030004d7070004d7120002d7030004d7060002d7030004d7050003d7070004d705 +0003d7070003d7070004d7040004d7070004d7050004d70b0003d7060002d7290008d707 +0008d7090008d772000ad70d0002d7040005d7020012d700000ad7060003d7040004d703 +0012d706000fd7070003d7050004d7030006d7000007d7010003d7040005d7e80000d742 +0009d700000ad7ffd7d4000ad708000ad7020002d7ad0005d70f0005d7030004d7070003 +d7040003d7060003d7070003d713000ed7070003d7090004d7040004d7090004d7060010 +d7020005d7070004d7120002d7040004d7040002d7040004d7050011d7040003d7070003 +d7070004d7040003d7090004d7040003d70c0004d7050002d7290008d7070008d7090009 +d772000ad70b0002d7060004d7050005d7040007d7040004d7040003d7060003d7050007 +d7030005d7050006d7030004d7060003d7060004d7060005d7010003d7010003d7060004 +d7e10002d7470009d701000ad7ffd7d2000ad7090009d7060000d7ac0005d70e0005d704 +0004d7070003d70e0004d7070003d7130005d70f0004d7090004d7040004d7090004d705 +0011d7020004d7080004d7120002d7040004d7040002d7040004d7050011d7040003d707 +0003d7070004d7030004d7090004d7040003d70d0003d7050001d7290008d7080008d709 +0009d774000ad7090002d7060005d7040004d7060005d7050004d7040004d7050004d704 +0005d7060005d7040004d7060004d7040004d7070004d7050004d7030001d7020003d706 +0005d7de0001d74b0009d701000ad7ffd7d0000ad709000ad70c0001d7a50005d70e0005 +d7040004d7070003d7090009d7070003d7130005d70f0004d7090004d7040004d7090004 +d7050012d7010004d7080004d7120002d7040005d7020003d7040004d7050011d7040003 +d7070003d7070004d7030004d7090004d7040003d70d0004d7030002d7290008d7080008 +d70a0008d775000ad7070002d7080004d7040004d7060004d7060004d7040003d7060004 +d7040004d7080004d7040003d7070004d7040003d7080004d7050004d7070003d7070005 +d7d70002d7510009d701000bd7ffd7ce000bd7090009d70f0001d7a30005d70e0005d704 +0004d7070003d7080005d7000003d7070003d7130005d70f0004d7090005d7030004d709 +0004d7050003d7100004d7080004d7120002d7050004d7020002d7050004d7050003d712 +0003d7070003d7070004d7030004d7090004d7040003d70e0003d7030002d7290008d708 +0008d70a0008d776000ad7060010d7040004d7060004d7060004d7040003d7060004d704 +0004d7080004d7040003d7070004d7030004d7080005d7040003d7080011d7d50001d755 +0009d701000ad7ffd7cd000bd709000ad7b50005d70e0005d7040004d7070003d7070004 +d7020003d7070003d7130005d70f0004d70a0004d7030004d7090004d7050004d70f0004 +d7080004d7120002d7050005d7000003d7050004d7050003d7120003d7070003d7070004 +d7030004d7090004d7040003d70e0004d7010002d72a0008d7080008d70a0009d7770009 +d7040011d7040004d7060004d7060004d70c0007d7040004d7080004d7040003d7070004 +d7030004d7080005d7040003d7080011d7cc0004d75b0009d702000ad7ffd7cb000bd70a +0009d7160002d79c0005d70e0004d7050004d7070003d7050004d7040003d7070003d713 +0005d70f0004d70a0004d7030004d7090004d7050004d70f0004d7080004d7120002d706 +0004d7000002d7060004d7050004d7110003d7070003d7070004d7030004d7090004d704 +0003d70e0004d7010002d7290009d7080008d70a0009d7790008d7030003d7120004d706 +0004d7060004d709000ad7040004d7080004d7040003d7070004d7030004d7090004d704 +0003d7080003d7d30002d7650009d702000ad7ffd7c9000bd70a000ad7190000d79b0005 +d70e0004d7050004d7070003d7040003d7060003d7070003d7130005d70f0005d7090003 +d7040004d7090004d7050004d70b0000d7020004d7080004d7120002d7060008d7060004 +d7050004d70a0000d7050003d7070003d7070004d7030005d7080004d7040003d70f0004 +d7000001d72a0008d7090008d70b0008d77b0006d7030004d7110004d7060004d7060004 +d7080005d7000004d7040004d7090003d7040003d7070004d7030004d7090004d7040003 +d7080003d7d10001d7680009d703000ad7ffd7c7000bd70b0009d71f0002d7940005d70d +0004d7060004d7070003d7040003d7060003d7070003d7130005d70f0005d7090003d704 +0004d7090004d7050005d70a0001d7010005d7070004d7120002d7070006d7070004d705 +0005d7090001d7040003d7070003d7070004d7030005d7080004d7040003d70f0007d72a +0008d7090008d70b0008d76e0001d70b0006d7020004d7110004d7060004d7060004d706 +0005d7020004d7040004d7090003d7040003d7070004d7030004d7090004d7040003d708 +0003d7ca0002d76f0009d703000ad7ffd7c5000bd70b000ad7220001d7920005d70c0005 +d7060004d7070003d7030003d7070003d7070003d7130005d7100004d7090003d7040004 +d7090004d7060005d7080001d7020005d7070004d7120002d7070006d7070004d7050005 +d7090001d7040003d7070003d7070004d7030005d7080004d7040003d7100006d72a0008 +d7090008d70b0009d76d0001d70c0005d7020004d7110004d7060004d7060004d7050004 +d7040004d7040004d7090003d7040003d7070004d7030004d7090004d7040003d7080004 +d7c70001d7720009d703000bd7ffd7c3000bd70c0009d7b80005d70b0005d7070004d707 +0003d7030003d7070003d7070003d7130005d7100004d7080004d7040004d7090004d706 +0005d7080001d7020006d7060004d7120002d7080004d7080004d7050006d7070002d704 +0003d7070003d7070004d7030005d7080003d7050003d7100005d72a0009d7090008d70b +0009d76d0002d70b0005d7020004d70b0000d7040004d7060004d7060004d7050003d705 +0004d7040004d7090003d7040003d7070004d7030004d7090004d7040003d7080004d70b +0000d7ffd7300009d703000cd7ffd7c0000bd70c000ad7290002d78b0005d70a0006d707 +0004d7050005d7030004d7050004d7070003d7130005d7100005d7070003d7050004d709 +0004d7070005d7060002d7030005d7060004d7120002d7080004d7080004d7060006d705 +0002d7050003d7070003d7070004d7040005d7060004d7050003d7110004d72a0009d708 +0008d70d0008d76d0002d70c0004d7020005d7090001d7040004d7060004d7060004d704 +0003d7060004d7040004d7090003d7040003d7070004d7030004d7090004d7040003d708 +0005d7090001d7b30002d7790009d704000cd7ffd7be000bd70d0009d72d0000d78a0005 +d7080007d7090005d7010008d7000000d7000006d701000ad7030003d7130005d7110005 +d7050003d7060004d70a0004d7010002d701000ed7040007d7020006d7010000d70f0002 +d7090002d7090005d705000ed7050004d7070004d7060004d7050005d7050003d7060004 +d7100003d72b0008d7090008d70d0008d76d0002d70c0004d7030005d7080001d7040004 +d7060004d7060004d7030004d7060004d7040004d7090003d7040003d7070004d7030005 +d7080004d7040003d7080006d7080001d7b20000d77d0009d704000cd7ffd7bc000bd70d +0009d7330002d7830008d7010008d70c000ad7000006d700000ad7000007d7020005d712 +0005d7120005d7030003d7070005d7090008d703000cd7060013d70e0003d7090002d709 +0005d706000cd7060005d7050005d7060004d7060005d7030003d7070004d7110002d72b +0008d7090008d70d0009d76c0003d70b0004d7030005d7080001d7040004d7060004d706 +0004d7030004d7060004d7040004d7090003d7040003d7070004d7030005d7080003d705 +0003d7080006d7070002d7aa0002d7830009d705000cd7ffd7ba000bd70e0009d7360000 +d77e0016d70e0008d7010004d7030008d7010006d700000ad70c000dd70f000bd705000a +d7070007d705000ad7080009d7000005d70c000bd7060000d706000dd7040009d704000a +d701000ad700000ad704000bd705000ad70e0002d72a0009d7090008d70d0009d76c0003 +d70b0004d7040006d7040003d7040004d7060004d7060004d7030004d7040006d7010000 +d7010005d7070003d7050003d7070004d7040005d7060003d7060003d7090007d7040002 +d7aa0000d7870009d705000cd7ffd7b8000bd70e0009d73d0001d7770012d7120007d702 +0002d7060006d7020005d701000ad70c000dd7110008d706000ad7080006d7070006d70c +0007d7000002d70f000bd7060000d706000dd7050007d705000ad701000ad700000ad705 +0008d707000ad70d0002d72b0009d7090008d70e0008d76c0005d7080004d705000ed705 +0004d7060004d7060004d7030006d701000ad7010005d7060003d7060003d7070004d705 +0005d7050003d7060004d709000dd7a40001d78e0009d705000cd7ffd7b6000bd70e000a +d73f0001d7ffd7ee0002d72b0008d70a0008d70e0009d76b0006d7050004d708000cd705 +0005d7060004d7060005d7020013d7010006d7040003d7060005d7060005d7040006d703 +0003d7060005d70a000cd7a20001d7910009d705000cd7ffd7b4000cd70d000ad7ffd7ff +d7300002d72b0009d7090008d70f0009d76b0010d70a000ad704000ad700000ad700000a +d7010008d7010006d702000ed7050009d701000ad703000bd706000ad7080009d7ffd738 +0009d706000cd7ffd7b2000cd70e000ad7460002d7ffd7e60002d72b0009d7090008d710 +0008d76b0002d7020008d70e0006d706000ad700000ad700000ad7030005d7030004d703 +0004d7000006d7070009d701000ad7070005d708000ad70a0006d79d0002d7990009d706 +000cd7ffd7b0000cd70e000ad74a0000d7ffd7df0001d7020002d72c0008d70a0008d710 +0009d7d00004d7f70000d79d0009d706000cd7ffd7ae000cd70e000ad7500002d7ffd7d6 +0009d72b0009d70a0008d7100009d7d00004d7ef0002d7a3000ad706000dd7ffd7aa000d +d70e000bd7530000d7ffd7d50008d72c0009d70a0008d7110008d7d00004d7ee0000d7a7 +000ad707000dd7ffd7a6000dd70f000bd7ffd7ffd72b0007d72d0008d70b0008d7110009 +d7cf0004d7ffd797000bd707000dd7ffd7a4000dd70f000bd75b0002d7ffd7cd0006d72d +0009d70a0009d7110009d7cf0004d7e60002d7ae000ad708000ed7ffd7a0000ed710000a +d75f0000d7ffd7cd0004d72e0009d70a0008d7130008d7cf0004d7e50000d7b1000bd709 +000dd7ffd79e000dd711000bd7650002d7ffd7f90008d70b0008d7130008d7cf0004d7dd +0002d7b8000bd709000dd7ffd79c000dd711000bd7690000d7ffd7f80008d70b0008d713 +0009d7cb000ad7d90000d7bc000bd709000dd7ffd79a000dd711000bd7700001d7ffd7f0 +0009d70b0008d7130009d7cb000ad7d20001d7c3000bd709000ed7ffd796000ed711000b +d7730001d7ffd7ee0009d70b0008d7140008d7ffd7a70001d7c6000bd709000ed7ffd794 +000ed712000ad7ffd7ffd7650008d70b0009d7140009d7ffd7ffd76f000cd70a000dd7ff +d792000dd713000bd77b0002d7ffd7e50009d70b0008d7150009d7ffd79e0002d7ce000b +d70b000dd7ffd790000dd713000bd77f0000d7ffd7e40009d70b0008d7160008d7ffd79d +0000d7d2000bd70b000ed7ffd78c000ed713000bd7860002d7ffd7dc0008d70c0008d716 +0009d7ffd7940002d7d9000bd70b000fd7ffd788000fd714000ad78a0000d7ffd7da0009 +d70c0008d7160009d7ffd7930000d7dd000bd70c000ed7ffd786000ed715000ad7ffd7ff +d7670009d70c0008d7160009d7ffd78c0001d7e4000bd70d000ed7ffd782000ed716000a +d7920002d7ffd7d20008d70c0009d7170009d7ffd7890001d7e7000bd70d000ed7ffd780 +000ed716000bd7950000d7ffd7d00009d70c0008d7180009d7ffd7ffd774000bd70e000e +d7ffd77c000ed716000cd79c0002d7ffd7c80009d70c0008d7180009d7ffd7810002d7f0 +000bd70e000fd7ffd778000fd716000cd7a00000d7ffd7c70008d70d0008d718000ad7ff +d77f0000d7f4000bd70f000fd7ffd774000fd717000cd7a70001d7ffd7bf0009d70d0008 +d718000ad7ffd7770002d7fb000bd70f0010d7ffd7700010d717000cd7aa0001d7ffd7bd +0009d70c0009d7190009d7ffd7760000d7ff000cd70e0010d7ffd76e0010d717000cd7ff +d7ffd76b0008d70d0008d71a000ad7ffd7ffd777000cd70f0010d7ffd76a0010d717000d +d7b30002d7ffd7b40009d70d0008d71a000ad7ffd76d0002d7ffd707000cd70f0011d7ff +d7660011d717000dd7b70000d7ffd7b30008d70e0008d71a000bd7ffd76b0000d7ffd70b +000dd70e0012d7ffd7620012d717000dd7be0002d7ffd7aa0009d70e0008d71a000bd7ff +d7630002d7ffd712000dd70f0012d7ffd75e0012d718000dd7c20000d7ffd7a90009d70d +0009d71a000bd7ffd7620000d7ffd716000dd7100012d7ffd75a0012d719000dd7ffd7ff +d76e0008d70e0009d71b000bd7ffd75a0001d7ffd71d000dd7110012d7ffd7560012d71a +000dd7ca0002d7ffd7a00009d70e0008d71c000bd7ffd7580001d7ffd721000dd7110012 +d7ffd7520012d71a000dd7cf0000d7ffd79f0008d70f0008d71c000bd7ffd7ffd77d000d +d7110013d7ffd74e0012d71b000dd7d50002d7ffd7980008d70f0008d71c000cd7ffd74f +0002d7ffd72a000dd7120014d7ffd7480013d71c000dd7d90001d7ffd7950009d70e0009 +d71c000cd7ffd74e0000d7ffd72f000cd7130014d7ffd7440013d71d000cd7e10001d7ff +d78f0008d70f0009d71d000cd7ffd7450002d7ffd734000fd7130014d7ffd7400013d71d +000dd7e40001d7ffd78c0009d70f0008d71e000cd7ffd7440000d7ffd7350012d7140014 +d7ffd73c0013d71d000ed7e70000d7ffd78b0008d7100008d71e000cd7ffd7ffd7790015 +d7150014d7ffd7380014d71d000ed7ed0002d7ffd7840008d7100008d71e000dd7ffd73b +0002d7ffd7380018d7150014d7ffd7340014d71d000ed7f20001d7ffd7810009d70f0009 +d71e000dd7ffd73a0000d7ffd739001bd7160014d7ffd7300014d71e000ed7f90002d7ff +d77a0008d7100009d71f000cd7ffd7330002d7ffd73c001fd7160015d7ffd72a0015d71e +000fd7fd0001d7ffd7780008d7100008d720000dd7ffd7300001d7ffd73d0011d700000f +d7170015d7ffd7260015d71f000fd7ffd7ffd7780008d7110008d720000dd7ffd72a0001 +d7ffd7420010d7030010d7170016d7ffd7200016d720000fd7ffd7050002d7ffd7700008 +d7100009d720000ed7ffd7270001d7ffd7420010d707000fd7180018d7ffd7180018d720 +000fd7ffd70a0001d7ffd76d0009d7100009d721000dd7ffd7260000d7ffd7420011d70a +000fd7190019d7ffd7100019d722000ed7ffd7120002d7ffd7660008d7110008d722000d +d7ffd71f0002d7ffd7450011d70d000fd71a001ad7ffd70a001ad723000ed7ffd7160001 +d7ffd7640008d7100009d722000ed7ffd71c0001d7ffd7460011d711000fd71b001ad7ff +d704001ad724000ed7ffd71e0002d7ffd75c0008d7110009d723000dd7ffd7150002d7ff +d74b0010d7140010d71b001ad7ffd7000019d725000fd7060000d7ffd71a0001d7ffd75a +0008d7110008d724000ed7ffd7120001d7ffd74c0010d718000fd71d001ad7fa001ad725 +000fd7090001d7ffd7ffd7740009d7100009d724000ed7ffd7ffd75f0011d71b000fd71d +001bd7f4001ad726000fd7ffd72c0002d7ffd7520008d7110009d725000ed7ffd70a0002 +d7ffd74e0011d71e0010d71e001cd7ec001bd7270010d7ffd7300001d7ffd74f0009d711 +0008d726000ed7ffd7080001d7ffd74f0011d7220010d71f001dd7e4001cd7280010d714 +0001d7ffd7210002d7ffd7480008d7110009d726000fd7ffd7000002d7ffd7540010d725 +0011d71f001ed7dd001ed7280011d7170001d7ffd7220001d7ffd7450009d7110009d727 +000ed7fe0001d7ffd7550011d7280011d720001fd7d5001fd7290011d7ffd7440001d7ff +d73f0008d7120008d728000fd7f70001d7ffd7590011d72b0012d7210020d7cd0020d72a +0012d7ffd7470001d7ffd73c0009d7120008d728000fd7f50001d7ffd7590011d72f0012 +d7220021d7c60020d72b0012d7220001d7ffd7260000d7ffd73b0008d7120009d7280010 +d7f30000d7ffd75a0010d7320013d7230022d7be0022d72b0013d7250001d7ffd7290002 +d7ffd7330009d7120009d729000fd7ec0002d7ffd75d0010d7360013d7240023d7b60023 +d72c0013d7ffd7560001d7ffd7310008d7130008d72a0010d7e90001d7ffd75e0011d739 +0013d7250025d7ac0025d72d0014d7ffd75d0002d7ffd7290009d7120009d72a0010d7e2 +0002d7ffd7620011d73d0013d7270027d7a00027d72f0014d7300000d7ffd7300001d7ff +d7270008d7130009d72b0010d7df0001d7ffd7630011d7410013d7290029d7940029d731 +0014d7330001d7ffd7ffd7570009d7130008d72c0010d7ffd7ffd7440010d7450014d72a +002bd788002bd7320015d7370000d7ffd7330002d7ffd71f0008d7130009d72c0011d7d7 +0002d7ffd7660010d7490014d72c002ed77a002ed7340015d7ffd7710001d7ffd71c0009 +d7130009d72d0010d7d50001d7ffd7670011d74c0015d72d0030d76e0030d7350016d7ff +d7790002d7ffd7150008d7140008d72e0011d7cd0002d7ffd76b0011d7500015d7300034 +d75c0034d7380016d7420001d7ffd7390001d7ffd7120009d7130009d72e0011d7cb0001 +d7ffd76c0011d7540016d733003bd742003bd73b0016d7470001d7ffd73d0001d7ffd70c +0008d7140009d72f0011d7c40001d7ffd7710010d7580016d73600b0d73e0016d7ffd78b +0001d7ffd7090009d7140008d7300011d7c20001d7ffd7710011d75c0016d73700a8d73f +0016d7ffd7900000d7ffd7080008d7140009d7300012d7c00000d7ffd7710011d7600017 +d73800a0d7400017d7540000d7ffd7410002d7ffd7000009d7140009d7310012d7b80002 +d7ffd7740011d7640017d73b0096d7430017d7570001d7ffd7420001d7fd0009d7140009 +d7320012d7b60001d7ffd7760010d7680018d73e008ad7460018d7ffd7a40002d7f60009 +d7140009d7330012d7ae0002d7ffd77a0010d76c0019d7450076d74d0019d7ffd7a90001 +d7f30009d7150008d7340012d7ac0001d7ffd77b0011d76f001bd74b0062d753001bd763 +0001d7ffd7ffd73b0008d7150009d7340013d7ffd7ffd7270011d774001cd74d0056d755 +001cd7680001d7ffd7490002d7eb0009d7150009d7350008d7000009d7a30002d7ffd77d +0011d778001dd7540042d75c001dd7ffd7b90001d7e80009d7150009d7360013d7a10001 +d7ffd77f0010d77d001dd76c000cd774001dd7ffd7c20002d7e10009d7150009d7370008 +d7000009d7990002d7ffd7830011d781001cd7ea001cd7760001d7ffd74f0001d7de0009 +d7150009d7380008d7000009d7970001d7ffd7840011d786001cd7e4001dd77a0001d7ff +d7530001d7d80009d7150009d7380009d7000009d78f0002d7ffd7880011d78a001ed7dd +001dd7ffd7d50001d7d50009d7160009d7390008d7010009d78c0001d7ffd7890011d78f +001fd7d5001fd7ffd7d90000d7d30009d7160009d73a0009d7000009d7ffd7ffd7170010 +d7940020d7cd0020d7880001d7ffd7560002d7cc0009d7160009d73b0008d7010009d784 +0002d7ffd78c0011d7990020d7c40021d78e0001d7ffd7570001d7c90009d7160009d73c +0008d701000ad7810001d7ffd78d0011d79e0023d7b80023d7ffd7f20002d7c1000ad716 +0009d73c0009d7010009d77a0002d7ffd7910011d79f002ad7ac0025d7ffd7f90001d7bf +0009d7170009d73d0008d7020009d7770001d7ffd7930010d7a10030d7a00027d7ffd7ff +d7be0009d7170009d73e0008d7020009d7710001d7ffd7970010d7a2000ad7020029d795 +002ad7a20001d7ffd7600002d7b70009d7170009d73f0008d7020009d76e0001d7ffd797 +0011d7a2000ad7070029d78d002fd7a30001d7ffd7610001d7b40009d7170009d7400008 +d702000ad76c0000d7ffd7970011d7a3000ad70c0029d7850033d7ffd7ffd70d0002d7ac +000ad7170009d7400009d7020009d7650002d7ffd79a0011d7a5000ad710002dd774002d +d703000bd7ffd7ffd70f0001d7aa0009d717000ad7410008d702000ad7620001d7ffd79c +0010d7a6000ad7150035d75c0035d708000bd7a60001d7ffd76b0001d7a3000ad7170009 +d7420009d7020009d75b0002d7ffd7a00011d7a6000ad71a003ed742003ed70d000ad7a8 +0001d7ffd76b0001d7a10009d717000ad7430008d7030009d7580001d7ffd7a10011d7a8 +000ad71e0048d7270047d712000ad7ffd7ffd7170000d79f0009d7180009d7440009d702 +000ad7ffd7f90011d7a9000ad72400aed717000bd7ffd7ffd71b0002d797000ad717000a +d7440009d7030009d7500002d7ffd7a30011d7aa000ad72b00a2d71e000bd7ab0001d7ff +d76f0001d7950009d718000ad7450009d702000ad74d0001d7ffd7a50010d7ab000ad732 +0096d725000ad7ad0001d7ffd7730002d78d000ad717000ad7460009d703000ad7450002 +d7ffd7a90011d7ac000ad738008ad72b000bd7ffd7ffd7250001d78a000ad718000ad747 +0009d703000ad7420001d7ffd7aa0011d7ad000ad740007cd733000bd7ffd7ffd7b0000a +d718000ad7480009d703000ad73c0001d7ffd7ae0011d7ae000ad7470070d73a000bd7b0 +0001d7ffd7760002d782000ad718000ad7490009d703000ad7390001d7ffd7ae0011d7b0 +000ad751005cd745000ad7b20001d7ffd7770001d77f000ad718000ad74a0009d704000a +d7370000d7ffd7af0010d7b1000ad75f0042d752000bd7ffd7ffd7310002d777000ad719 +000ad74b0009d703000bd72f0002d7ffd7b20011d7b1000ad76e0027d760000bd7ffd7ff +d7330001d774000bd718000ad74c0009d704000ad72d0001d7ffd7b30011d7b30009d778 +0009d776000bd7b50001d7ffd7800001d76e000ad719000ad74d0009d704000ad7250002 +d7ffd7b70011d7b4000ad7780009d777000ad7b70001d7ffd7800001d76b000ad719000a +d74e0009d705000ad7220001d7ffd7b90010d7b5000ad7790009d777000bd7ffd7ffd73b +0000d769000ad71a000ad74f0009d704000ad7ffd7dc0011d7b5000ad77a0009d778000b +d7ffd7ffd73f0002d762000ad719000ad7500009d705000ad71a0002d7ffd7bb0011d7b7 +000ad77a0009d779000ad7ffd7ffd7420001d75f000ad71a000ad7510009d705000ad717 +0001d7ffd7bc0011d7b8000ad77b0009d77a000ad7ba0000d7ffd78b0002d757000ad71a +000ad7520009d705000bd70f0002d7ffd7c00011d7b9000ad77c0009d77a000bd7ba0001 +d7ffd78c0000d755000bd71a000ad7530009d705000ad70d0001d7ffd7c20010d7bb0009 +d77d0009d77b000bd7ffd7ffd74e0001d74e000ad71a000ad7540009d706000ad7060001 +d7ffd7c60011d7bb000ad77d0009d77c000ad7ffd7ffd7500001d74b000ad71b000ad755 +0009d705000bd7030001d7ffd7c60011d7bc000ad77e0009d77c000bd7be0001d7ffd7db +000bd71a000ad7560009d706000bd7010000d7ffd7c60011d7bd000ad77f0009d77d000b +d7bf0001d7ffd7930002d741000bd71b000ad7570009d706000ad7ffd7c70011d7bf000a +d77f0009d77e000bd7ffd7ffd7570000d740000ad71b000ad758000ad706000ad7ffd7c5 +0011d7bf000ad7800009d77f000ad7ffd7ffd75d0002d737000ad71b000bd7590009d706 +000bd7ffd7c20011d7c0000ad7810009d77f000bd7c30001d7ffd7990000d735000bd71b +000ad75a000ad706000bd7ffd7bf0011d7c20009d7820009d780000bd7c40001d7ffd7cd +000bd71b000bd75b0009d707000ad7ffd7bd0011d7c3000ad7820009d781000bd7ffd7ff +d7630002d72c000ad71c000ad75d0009d706000bd7c10001d74d0002d7a60010d7c4000a +d7830009d782000ad7ffd7ffd7660000d72a000bd71b000ad75e000ad706000bd7aa0005 +d7040001d7060005d7490004d7a40011d7c50009d7840009d782000bd7c80001d7ffd7a0 +0002d721000bd71c000ad75f0009d707000bd7a6000bd7000002d7060005d7470006d7a2 +0011d7c6000ad7840009d783000bd7c90001d7ffd7a10000d71f000bd71c000ad760000a +d707000ad7a50005d7020007d7060005d7460007d7a00011d7c7000ad7850009d784000a +d7ffd7ffd7730001d718000ad71c000bd7610009d707000bd7a40003d7070004d7060005 +d7490004d79e0011d7c8000ad7860009d785000ad7ffd7ffd7740001d715000bd71c000a +d762000ad706000cd7a20003d7080004d7070003d74a0004d79d0010d7ca000ad7860009 +d785000bd7cd0001d7f90003d7150003d7a2000bd71c000ad764000ad7050000d700000b +d7a00004d7090003d7560004d79b0011d7ca000ad7870009d786000bd7ce0001d7a90010 +d73b0005d7130005d7910002d70b000bd71d000ad7650009d7050000d701000ad7a00004 +d70a0002d7560004d7990011d7cb000ad7880009d787000ad7ffd77a0012d7390005d713 +0005d7940000d70a000ad71d000ad766000ad7040000d702000ad79f0004d70a0002d756 +0004d7970011d7cd0009d7890009d787000bd7ffd77d0010d7370005d7130005d79a0002 +d701000ad71e0009d768000ad7030000d703000ad79e0005d70a0001d7560004d7950011 +d7ce000ad7890009d788000bd7d20000d7a90004d7040006d72c0001d7080004d7090000 +d7080005d79d000bd71e000ad768000ad7030000d703000bd79d0005d70a0001d7560004 +d7940011d7ce000ad78a0009d789000bd7d20000d7a80004d7060005d72b0001d7090001 +d70b0000d70a0001d79f000bd71e0009d76a000ad7020000d704000bd79c0006d7090001 +d7090002d70b0005d70c0002d7030004d70c0006d70a0004d7920011d7cf000ad78b0009 +d78a000ad7d30000d7a70004d7060005d72b0001d7160001d7ab000bd71e000ad76b0009 +d7020000d705000ad79c0008d7100005d7080010d7020004d7010008d708000bd7070004 +d7900011d7d1000ad78b0009d78a000bd7ffd77b0004d7070005d7290002d7160001d7ab +000ad71e000ad76c000ad7010000d706000ad79c0009d70c0007d7070003d7040008d700 +0006d700000ad7060004d7010005d7070004d78e0011d7d2000ad78c0009d78b000bd7ff +d77a0004d7070005d7280003d7150002d7aa000ad71f0009d76e000ad7000000d707000a +d79c000ad70a0007d7070003d7040008d7000012d7050003d7050004d7060004d78d0010 +d7d3000ad78d0009d78c000bd7d50001d7a10004d7070005d7270004d7140003d7a9000a +d71f000ad76e000ad7000000d707000bd79b000bd70c0004d7060003d7060004d7050007 +d7030005d7040003d7050004d7060004d78b0011d7d40009d78e0009d78d000ad7d70001 +d79f0004d7070005d7070004d70d0001d7040000d7030005d70a0002d7050004d70b0002 +d70c0002d70f0001d7050001d76f000bd71f0009d770000bd708000ad79d000bd70a0004 +d7060003d7060004d7060004d7060004d7040003d7050004d7060004d7890011d7d5000a +d78e0009d78d000bd7ffd7780004d7070005d705000ad7070003d7020011d7030004d703 +000bd7040004d70a0008d7090003d7030005d76d000ad71f0009d771000bd709000ad79e +000ad7090004d7050004d7060004d7060003d7070004d7040003d7060003d7060004d787 +0011d7d6000ad78f0009d78e000bd7ffd7770004d7070005d704000cd7040005d7010012 +d7010006d703000bd7020006d708000ad7070005d7010008d76b000ad7200009d772000a +d70a000ad79e000ad7080004d7050004d7070003d7060003d7070004d7040003d7060003 +d7060004d7850011d7d80009d7900009d78f000ad7db0001d7990004d7070004d7040004 +d7030004d7030006d7000007d7010004d7050007d7060003d7060007d7070003d7030005 +d7040006d700000ad769000ad7200009d774000ad70a000ad79f0009d7070004d7050004 +d7070003d7060003d7070004d70e0004d7060004d7840011d7d8000ad7900009d790000a +d7dc0001d7970004d7060005d7040003d7050004d7020000d700000dd7010004d7050000 +d7010004d7060003d7060000d7000005d7070003d7050004d7030000d7000008d7010006 +d767000ad720000ad774000ad70b000ad79f0008d7070004d7050004d7070003d7060003 +d7070004d7090009d7060004d7820011d7d9000ad7910009d790000bd7ffd7750004d705 +0005d7040004d7050004d7050005d7010003d7020004d7080004d7060003d7090004d706 +0003d7060005d7050005d7050004d766000ad7210009d776000ad70a000bd7a10006d706 +0004d7060003d7070003d7060003d7070004d7080005d7000003d7060004d7800011d7da +000ad7920009d791000bd7ffd774000fd7050004d7050004d7050004d7090004d7080004 +d7060003d7090004d7050003d7080004d7050003d7070004d765000bd7020000d71c0009 +d777000bd70a000bd7930001d70a0006d7060004d7060004d7050003d7070003d7070004 +d7070004d7020003d7060004d77e0011d7dc0009d7930009d792000ad7e00001d791000d +d7070004d7050004d7050003d70a0004d7080004d7060003d7090004d7040004d7080005 +d7040003d7070004d764000bd7030000d71b000ad778000ad70b000bd7920001d70b0006 +d7050004d7070004d7030003d7080003d7070004d7050004d7040003d7060004d77c0011 +d7dd000ad7930009d792000bd7e10001d78f000bd70a0002d7050005d7050003d70a0004 +d7080004d7060003d7090004d7040004d7090004d7040003d7070004d763000bd7040000 +d71b0009d77a000ad70b000ad7920001d70c0005d7050004d708000ad7090003d7070004 +d7040003d7060003d7060004d77b0011d7dd000ad7940009d793000bd7ffd7720004d718 +0007d7050003d70a0004d7080004d7060003d7090004d7040004d7090004d7040003d707 +0004d763000ad7050000d71a0009d77b000bd70b000ad7910002d70b0005d7050004d709 +0007d70b0003d7070004d7040003d7060003d7060004d7790011d7df0009d7950009d794 +000bd7ffd7710004d7160009d7050003d70a0004d7080004d7060003d7090004d7040004 +d7090004d7040003d7070004d762000ad7060000d719000ad77c000bd70b000ad7900002 +d70c0004d7050004d7070003d7010002d70c0003d7070004d7030003d7070003d7060004 +d7770011d7e0000ad7950009d795000ad7e50001d7890004d7130005d7010004d7050003 +d70a0004d7080004d7060003d7090004d7040004d7090004d7040003d7070004d761000a +d721000ad77e000ad70c000ad78f0002d70c0003d7060004d7060002d7130003d7070004 +d7030003d7070003d7060004d7750011d7e1000ad7960009d795000bd7e60001d7870004 +d7120004d7030004d7050003d70a0004d7080004d7060003d7090004d7040004d7090004 +d7040003d7070004d760000ad7220009d77f000bd70c000ad78e0003d70a0004d7060004 +d7060002d7130003d7070004d7030004d7050004d7060004d7740010d7e2000ad7970009 +d796000bd7ffd76f0004d7110003d7050004d7050003d70a0004d7080004d7060003d709 +0004d7040004d7090004d7040003d7070004d75f000ad722000ad780000bd70b000bd78d +0005d7080003d7070004d7050010d7060004d7060004d7030006d701000ad7020004d772 +0011d7e30009d7980009d797000bd7ffd76e0004d7100004d7050004d7050003d70a0004 +d7080004d7060003d7090004d7040004d7090004d7040003d7070004d75e000bd721000a +d782000ad70c000bd78c0005d7060004d7070006d7040011d7040005d7060005d702000a +d7000007d7020005d76f0011d7e4000ad7980009d798000ad7e90001d7820004d7100003 +d7060004d7050003d70a0004d7080004d7060003d7090004d7040004d7090004d7040003 +d7070004d75d000bd70a0000d7160009d784000ad70c000bd78b0010d706000ad7030012 +d700000ad700000ad7010008d7010006d700000ad76b0011d7e5000ad7990009d798000b +d7ea0001d7800004d70f0004d7060004d7050003d70a0004d7080004d7060003d7090004 +d7040005d7080004d7040003d7070004d75c000bd70b0000d715000ad784000bd70c000b +d78a0001d7020009d708000ad704001dd700000ad7020006d7020004d702000ad7690011 +d7e70009d79a0009d799000bd7ffd76c0004d70f0004d7060004d7050003d70a0004d708 +0004d7060004d7080004d7050005d7070003d7050003d7070004d75b000bd70c0000d714 +000ad786000ad70d000bd7b00002d70c0003d79f0011d7e7000ad79a0009d79a000ad7ff +d76c0004d70f0005d7040005d7010001d7010004d7090004d7020002d7020004d7060004 +d7020001d7030004d7050005d7060004d7050003d7070004d75a000bd70d0000d7140009 +d788000ad70d000bd7ae0002d70e0002d79d0011d7e8000ad79b0009d79b000ad7ffd76b +0004d7100013d7010004d7090009d7030004d7060009d7030004d7060005d7050003d706 +0004d7060004d759000bd70e0000d713000ad788000bd70d000ad7ae0002d70e0001d79c +0011d7ea0009d79c0009d79b000bd7ed0001d7780008d70e0011d7020006d7090008d702 +0006d7050008d7030006d7060006d7010004d7050006d7050006d758000ad723000ad78a +000bd70d000ad7ac0003d70d0002d79a0011d7eb0009d79d0009d79c000bd7ee0001d773 +000dd70d0008d7010004d701000ad7070006d702000ad7040006d702000ad706000ad705 +000ad700000ad755000ad723000bd78b000ad70e000ad7ab0004d70b0002d7990011d7ec +000ad79d0009d79d000ad7ffd7810005d7030003d7170003d7150003d7170005d774000a +d724000ad78c000bd70e000ad7aa0012d7990011d7ec000ad79e0009d79d000bd7ffd7ff +d756000ad724000ad78e000bd70e000ad7aa0010d7980011d7ee0009d79f0009d79e000b +d7f20001d7ffd75f000ad7130000d70f000bd78f000ad70e000bd7ab000dd7970011d7ef +000ad79f0009d79f000bd7f30001d7ffd75c000bd7130000d70f000ad791000ad70e000b +d7ac0009d7970011d7f0000ad7a00009d7a0000ad7ffd7ffd751000bd7140000d70e000a +d792000bd70e000bd7ffd74c0010d7f20009d7a10009d7a0000bd7ffd7ffd74f000bd715 +0000d70d000bd793000bd70e000bd7ffd7490011d7f2000ad7a10009d7a1000bd7f70001 +d7ffd753000bd7160000d70c000bd795000ad70f000bd7ffd7460011d7f3000ad7a20009 +d7a2000bd7f80001d7ffd750000bd725000ad796000bd70f000bd7ffd7430011d7f4000a +d7a30009d7a3000ad7ffd7ffd74a000bd725000bd797000bd70f000bd7ffd7400011d7f6 +0009d7a40009d7a3000bd7ffd7ffd748000bd725000bd799000bd70f000bd7ffd73e0011 +d7f6000ad7a40009d7a4000bd7fc0000d7ffd748000bd725000bd79b000ad710000bd7ff +d73b0011d7f7000ad7a50009d7a5000ad7fd0001d7ffd745000bd71b0000d709000ad79c +000bd710000bd7ffd7380011d7f90009d7a60009d7a6000ad7ffd7ffd743000bd71c0000 +d708000bd79d000bd710000bd7ffd7350011d7fa000ad7a60009d7a6000bd7ffd7ffd741 +000bd71d0000d707000bd79f000bd710000bd7ffd7320011d7fb000ad7a70009d7a7000b +d7ffd7000001d7ffd73c000bd71f0000d705000bd7a1000ad711000bd7ffd7300011d7fb +000ad7a80009d7a8000ad7ffd7020001d7ffd739000bd7200000d705000ad7a3000ad711 +000bd7ffd72d0011d7fd0009d7a90009d7a8000bd7ffd7ffd73c000bd727000ad7a5000a +d711000bd7ffd72a0011d7fe000ad7a90009d7a9000bd7ffd7ffd73a000bd727000ad7a6 +000bd711000bd7ffd7270011d7ff000ad7aa0009d7aa000bd7ffd7050000d7ffd731000b +d727000bd7a7000bd710000cd7ffd7250011d7ffd7000009d7ab0009d7ab000ad7ffd706 +0001d7ffd72e000cd726000bd7a9000ad711000cd7ffd7220011d7ffd701000ad7ab0009 +d7ab000bd7ffd7070000d7ffd72c000cd7240000d701000ad7ab000ad711000cd7ffd71f +0011d7ffd702000ad7ac0009d7ac000bd7ffd7ffd733000cd7250000d700000ad7ad000a +d711000cd7ffd71c0011d7ffd7040009d7ad0009d7ad000bd7ffd7ffd731000cd726000b +d7ae000bd711000cd7ffd7190011d7ffd7050009d7ae0009d7ae000ad7ffd70a0001d7ff +d723000cd727000bd7af000ad712000cd7ffd7170011d7ffd705000ad7ae0009d7ae000b +d7ffd70b0001d7ffd720000cd728000ad7b1000ad712000cd7ffd7140011d7ffd706000a +d7af0009d7af000bd7ffd7ffd72c000cd728000ad7b3000ad712000cd7ffd7110011d7ff +d7080009d7b00009d7b0000ad7ffd7ffd72b000cd728000ad7b5000ad712000dd7ffd70d +0011d7ffd709000ad7b00009d7b1000ad7ffd70f0001d7ffd716000dd728000ad7b7000a +d712000dd7ffd70a0011d7ffd70a000ad7b10009d7b1000bd7ffd7100001d7ffd713000d +d728000ad7b8000bd712000dd7ffd7080011d7ffd70b0009d7b20009d7b2000bd7ffd7ff +d724000dd728000bd7b9000bd712000dd7ffd7050011d7ffd70c0009d7b30009d7b3000a +d7ffd7ffd723000dd728000bd7bb000bd712000dd7ffd7020011d7ffd70d000ad7b30009 +d7b3000bd7ffd7140000d7ffd70b000dd728000bd7bd000ad713000dd7ff0011d7ffd70e +000ad7b40009d7b4000bd7ffd7140001d7ffd708000dd729000ad7bf000ad713000dd7fd +0011d7ffd70f0009d7b50009d7b5000bd7ffd7ffd71d000cd72a000ad7c1000ad714000d +d7f90011d7ffd710000ad7b50009d7b6000ad7ffd7ffd71b000dd72a000ad7c3000ad714 +000dd7f60011d7ffd711000ad7b60009d7b6000bd7ffd7180000d7ff000dd72a000ad7c5 +000ad714000dd7f30011d7ffd7130009d7b70009d7b7000bd7ffd7180001d7fc000dd72a +000ad7c6000bd714000dd7f00011d7ffd7140009d7b80009d7b8000bd7ffd7190000d7fa +000dd72a000bd7c7000bd714000dd7ee0011d7ffd714000ad7b80009d7b9000ad7ffd7ff +d714000cd72b000bd7c9000bd714000dd7eb0011d7ffd7160009d7b90009d7b9000bd7ff +d7ffd712000cd72b000bd7cb000bd714000dd7e80011d7ffd7170009d7ba0009d7ba000b +d7ffd71c0001d7f1000cd72b000bd7cd000bd715000dd7e40011d7ffd718000ad7ba0009 +d7bb000ad7ffd71e0001d7ed000dd72b000bd7cf000bd715000dd7e10012d7ffd718000a +d7bb0009d7bc000ad7ffd7ffd70c000dd72b000bd7d1000ad716000dd7df0011d7ffd71a +0009d7bc0009d7bc000bd7ffd7ffd70a000cd72d000ad7d3000ad716000dd7dc0011d7ff +d71b000ad7bc0009d7bd000bd7ffd7ffd708000cd72d000ad7d5000ad716000dd7d90011 +d7ffd71c000ad7bd0009d7be000ad7ffd7210001d7e3000cd72d000ad7d7000ad716000e +d7d50011d7ffd71e0009d7be0009d7be000bd7ffd7220001d7df000dd72d000ad7d9000a +d716000ed7d30011d7ffd71e0009d7bf0009d7bf000bd7ffd7ffd702000dd72d000ad7da +000bd717000dd7d00011d7ffd71f000ad7bf0009d7c0000bd7ffd7ffd700000cd72e000b +d7db000bd717000dd7cd0011d7ffd720000ad7c00009d7c1000ad7ffd7ff000cd72e000b +d7dd000bd717000dd7ca0011d7ffd7220009d7c10009d7c1000bd7ffd7250001d7d5000c +d72e000bd7df000bd717000ed7c60011d7ffd723000ad7c10009d7c2000bd7ffd7260001 +d7d1000dd72e000bd7e1000bd717000ed7c40011d7ffd723000ad7c20009d7c3000bd7ff +d7f8000dd72e000bd7e3000bd717000ed7c10011d7ffd7250009d7c30009d7c4000ad7ff +d7f7000dd72e000bd7e5000bd718000dd7be0011d7ffd7260009d7c40009d7c4000bd7ff +d7290000d7ca000cd72f000bd7e7000bd718000dd7bb0011d7ffd727000ad7c40009d7c5 +000bd7ffd7290001d7c7000cd72f000bd7e9000bd718000ed7b70012d7ffd7280009d7c5 +0009d7c6000ad7ffd72b0000d7c4000dd72f000bd7eb000bd718000ed7b50011d7ffd729 +0009d7c60009d7c7000ad7ffd7ef000dd72f000bd7ed000bd718000ed7b20011d7ffd72a +000ad7c60009d7c7000bd7ffd7ed000dd72f000bd7ef000bd719000dd7af0011d7ffd72b +000ad7c70009d7c8000bd7ffd72d0000d7bc000dd72f000bd7f1000bd719000dd7ac0011 +d7ffd72d0009d7c80009d7c9000ad7ffd72e0001d7b9000dd72f000bd7f3000bd719000e +d7a80012d7ffd72d0009d7c90009d7c9000bd7ffd72f0000d7b6000dd730000bd7f5000b +d719000ed7a60011d7ffd72e000ad7c90009d7ca000bd7ffd7e5000dd730000bd7f7000b +d719000ed7a30011d78b0002d7a10009d7ca0009d7cb000bd7ffd7e3000dd730000bd7f8 +000cd71a000dd7a00011d78d0002d70c0004d78e0009d7cb0009d7cc000ad7ffd7320001 +d7ad000dd730000bd7fa000cd71a000ed79c0011d775000dd70a0002d709000cd789000a +d7cb0009d7cc000bd7ffd7330001d7a9000ed730000bd7fc000cd71a000ed79a0011d776 +000dd70a0002d707000fd787000ad7cc0009d7cd000bd7ffd7340000d7a7000ed730000b +d7fe000cd71a000ed7970011d77c0006d70d0002d7060004d7080003d7860009d7cd0009 +d7ce000bd7ffd7db000ed730000bd7ffd700000cd71a000fd7930011d77e0005d70d0002 +d7060004d70a0003d7840009d7ce0009d7cf000ad7ffd7d9000ed731000bd7ffd702000c +d71b000ed7900011d7810004d70d0002d7050004d70c0003d782000ad7ce0009d7cf000b +d7ffd7370001d79d000ed731000bd7ffd704000cd71b000ed78d0012d7820004d70d0001 +d7060004d70c0004d7810009d7cf0009d7d0000bd7ffd7380001d79a000ed731000bd7ff +d706000cd71b000fd78a0011d7840004d70c0002d7050004d70e0004d77f0009d7d00009 +d7d1000ad7ffd7d3000fd731000bd7ffd708000dd71a000fd7870011d7860004d70c0002 +d7050004d70e0004d77e000ad7d00009d7d2000ad7ffd7d1000fd730000cd7ffd70a000d +d71b000fd7830011d7880004d70c0001d7050004d7100004d77d0009d7d10009d7d2000b +d7ffd7ce000fd731000cd7ffd70c000dd71b000fd7800011d78a0004d70b0002d7050004 +d7100004d77c0009d7d20009d7d3000bd7ffd73b0001d78e000fd731000cd7ffd70e000d +d71b000fd77d0012d78b0004d70b0002d7050004d7100004d77b000ad7d20009d7d4000a +d7b30002d7860001d78b000fd731000cd7ffd710000dd71c000fd77a0011d78d0004d70b +0001d7050004d7110005d779000ad7d30009d7d4000bd763000ed73d0005d7ffd711000f +d732000cd7ffd712000dd71c000fd7770011d78f0004d70a0002d7050004d7110005d779 +0009d7d40009d7d5000bd7620013d7380005d7ffd710000fd732000cd7ffd714000dd71d +000ed7740011d7910004d70a0001d7060004d7110005d7780009d7d50009d7d6000bd764 +0011d7370005d78b0000d782000ed733000cd7ffd717000dd71c000fd7700012d7920004 +d70a0001d7050005d7110006d776000ad7d50009d7d7000ad7650005d7050005d7360005 +d78c0001d77e000fd732000cd7ffd71a000dd71d000ed76e0011d7940004d7090002d705 +0005d7120005d7760009d7d60009d7d7000bd7650004d7060005d7370002d78f0001d77b +000ed733000cd7ffd71c000dd71d000ed76b0011d7960004d7090001d7060005d7120005 +d7750009d7d70009d7d8000bd7640004d7070005d7ffd746000ed733000cd7ffd71e000d +d71d000fd7670011d7980004d7080002d7070004d7120004d775000ad7d70009d7d9000b +d7630004d7080005d7ffd743000fd733000cd7ffd720000dd71e000ed7640011d79a0004 +d7080002d7070004d7110005d774000ad7d80009d7da000ad7630004d7080005d7ce0001 +d771000ed734000cd7ffd722000dd71e000fd7600012d79b0004d7080001d7080004d711 +0005d7740009d7d90009d7da000bd7620004d7080005d7d00001d76d000fd734000cd7ff +d724000dd71f000ed75e0011d79d0004d7070002d7080004d7110004d7740009d7da0009 +d7db000bd7610004d7080005d7ffd73f000ed735000cd7ffd727000dd71e000fd75a0011 +d79f0004d7070001d7090005d7100004d773000ad7da0009d7dc000ad7610004d7080005 +d70b0007d70c0007d70d0002d70a0007d70c0002d7020005d7d7000fd734000cd7ffd72a +000dd71f000fd7560011d7a10004d7070001d7090005d7100004d7730009d7db0009d7dd +000ad7600004d7070006d70a000ad709000fd7030005d709000ad7070005d7010007d7d4 +000fd735000cd7ffd72c000dd71f000fd7530011d7a30004d7060002d70a0004d7100003 +d7730009d7dc0009d7dd000bd75f0004d7070005d70a0003d7010006d7070003d7030009 +d7000007d7080004d7010005d7040007d7000009d76e0001d761000fd735000cd7ffd72e +000dd71f0010d74f0012d7a40004d7060001d70c0004d70e0004d772000ad7dc0009d7de +000bd75e0004d7060005d70a0003d7040004d7060003d7050006d7020007d7070003d705 +0004d7030013d76f0001d75d0010d735000cd7ffd730000dd720000fd74d0011d7a60004 +d7060001d70d0003d70e0003d7730009d7dd0009d7df000ad75e0004d7040006d70a0003 +d7060003d7050003d7060004d7070004d7060004d7050004d7060005d7050004d7ce000f +d736000cd7ffd732000ed71f0010d7490011d7a80004d7050002d70d0004d70c0003d773 +0009d7de0009d7df000bd75d000fd70b0002d7070004d7040003d7070003d7070004d705 +0004d7070004d7050004d7060004d7cc0010d735000dd7ffd734000ed720000fd7460011 +d7a90005d7050001d70f0004d70a0004d7720009d7df0009d7e0000bd75c000dd70c0003 +d7070004d7040003d7070004d7060004d7050004d7070004d7050004d7060004d7cb000f +d736000dd7ffd737000dd7200010d7420012d7aa0005d7050001d7100004d7080004d772 +000ad7df0009d7e1000bd75b000dd70c0011d7020004d7070004d7060004d7050003d709 +0004d7040004d7070003d7760001d7500010d736000cd7ffd73a000dd721000fd7400011 +d7ab0008d7020001d7120007d7000007d7730009d7e00009d7e2000ad75b0004d7020006 +d70b0011d7020004d7070004d7060004d7040004d7090004d7040004d7070003d7780001 +d74d000fd737000cd7ffd73c000dd7210010d73c0011d7aa000dd7000001d714000cd774 +0009d7e10009d7e2000bd75a0004d7030005d70b0003d7110004d7060004d7060004d704 +0004d7090004d7040004d7070003d7c6000fd738000cd7ffd73e000ed7210010d7380011 +d7ffd753000ad7e10009d7e3000bd7590004d7030006d70a0003d7110004d7060003d707 +0004d7040004d7090005d7030004d7070003d7c40010d737000dd7ffd740000ed7210010 +d7350011d7ffd7550009d7e20009d7e4000bd7580004d7040006d7090003d7120003d705 +0003d7080004d7040004d7090005d7030004d7070003d77e0000d743000fd738000dd7ff +d743000dd7220010d7310012d7ffd7550009d7e30009d7e5000ad7580004d7050005d709 +0003d7120004d7040002d7090004d7040004d7090005d7030004d7070003d77f0001d73f +0010d738000cd7ffd746000dd7220010d72f0011d7ffd7560009d7e40009d7e5000bd757 +0004d7060005d7080003d70b0000d706000ad70a0004d7040005d7080004d7040004d707 +0003d7810000d73d000fd739000cd7ffd748000dd7230010d72b0011d7ffd757000ad7e4 +0009d7e6000bd7560004d7060005d7080004d70a0001d7050009d70b0004d7040005d708 +0004d7040004d7070003d7be0010d739000cd7ffd74a000ed7220010d7280011d7ffd759 +0009d7e50009d7e7000ad7560004d7070005d7070005d7090001d7040002d7130004d704 +0005d7080004d7040004d7070003d7bd000fd739000dd7ffd74d000dd7230010d7240011 +d7ffd75a0009d7e60009d7e8000ad7550004d7080005d7060005d7080002d7040002d713 +0004d7040005d7080003d7050004d7070003d7860000d7330010d739000cd7ffd750000d +d7230011d7200012d7ffd75a000ad7e60009d7e8000bd7540004d7090005d7060007d703 +0003d7040004d7120004d7050005d7070003d7050004d7070003d7870001d72f0010d73a +000cd7ffd752000dd7240010d71e0011d7ffd75c0009d7e70009d7e9000bd7530004d70a +0005d705000ed7040010d7070004d7060005d7050003d7060004d7070003d7890001d72c +000fd73b000cd7ffd754000dd7240011d71a0011d7ffd75d0009d7e80009d7ea000ad752 +0006d7090007d704000cd7050012d7050005d7070004d7020004d7060005d7060005d7b5 +0010d73b000cd7ffd757000dd7240010d7170011d7ffd75e0009d7e90009d7ea000bd74d +000dd7070009d7030009d7070012d701000ad7070009d705000ad7010009d7b2000fd73b +000cd7ffd75a000dd7240011d7130012d7ffd75e000ad7e90009d7eb000bd74c000dd708 +0008d7040007d70a0011d700000ad7080005d708000ad7010009d78c0001d7210010d73b +000cd7ffd75c000dd7250011d7100011d7ffd7600009d7ea0009d7ec000bd7810002d70c +0003d7c90001d71d0010d73c000cd7ffd75e000dd7250011d70d0011d7ffd7610009d7eb +0009d7ed000ad7800002d70e0002d7e80010d73c000cd7ffd761000dd7250011d7090011 +d7ffd762000ad7eb0009d7ed000bd77f0002d70e0002d7e60010d73c000cd7ffd764000d +d7260010d7060011d7ffd7640009d7ec0009d7ee000bd77d0004d70c0002d7e6000fd73d +000cd7ffd766000dd7260011d7020012d7ffd7640009d7ed0009d7ef000bd77c0005d70a +0002d7d10001d7110010d73d000cd7ffd768000ed7260023d7ffd765000ad7ed0009d7f0 +000ad77c0012d7d40001d70d0010d73d000dd7ffd76b000dd727001fd7ffd7670009d7ee +0009d7f0000bd77c0011d7e30010d73d000cd7ffd76e000dd727001cd7ffd7680009d7ef +0009d7f1000bd77d000cd7e40010d73e000cd7ffd770000ed7270019d7ffd7680009d7f0 +0009d7f2000ad77f0008d7e5000fd73e000dd7ffd773000dd7280015d7ffd769000ad7f0 +0009d7f3000ad7ffd76b0010d73e000dd7ffd775000ed7270012d7ffd76b0009d7f10009 +d7f3000bd7ffd7680010d73e000dd7ffd778000ed7280010d7ffd76a0009d7f20009d7f4 +000bd7ffd7660010d73e000dd7ffd77b000dd7290010d7ffd767000ad7f20009d7f5000a +d7ffd7640010d73f000dd7ffd77d000ed7260013d7ffd7650009d7f30009d7f5000bd7ff +d7610010d73f000dd7ffd780000ed7250015d7ffd7620009d7f40009d7f6000bd7ffd75e +0011d73f000dd7ffd783000dd7240017d7ffd75f0009d7f50009d7f7000bd7ffd75b0011 +d740000dd7ffd785000ed7220019d7ffd75c000ad7f50009d7f8000ad7ffd7590012d73f +000dd7ffd788000ed721001bd7ffd75a0009d7f60009d7f8000bd7ffd7560012d740000d +d7ffd78b000dd7200008d7010012d7ffd7570009d747000ed7a00009d7f9000bd7ffd753 +0012d741000dd7ffd78d000ed71e0008d7020012d7ffd755000ad7470012d79c0009d7fa +000ad7ffd7520012d740000ed7ffd78f000ed71d0008d7040012d7ffd7530009d74b0011 +d79a0009d7fb000ad7ffd74f0012d741000dd7ffd793000ed71b0008d7060012d7ffd750 +0009d74c0005d7050006d7210001d7750009d7fb000bd7ffd74c0012d741000ed7ffd795 +000ed71a0008d7080012d7ffd74d0009d74e0004d7060005d7210001d7750009d7fc000b +d7ffd7490012d7020000d73e000ed7ffd797000fd7180008d70a0012d7ffd74b0009d74e +0004d7070005d7200001d7750009d7fd000ad7ffd7470012d7040000d73c000ed7ffd79b +000fd7160008d70c0012d7ffd7480009d74f0004d7080005d71e0002d7750009d7fd000b +d7ffd7440012d7060000d73a000fd7ffd79d000fd7150008d70d0013d7ffd7450009d750 +0004d7080005d71d0003d7750009d7fe000bd7ffd7410013d7070000d739000fd7ffd79f +0010d7130008d70f0013d7ffd742000ad7500004d7080005d71d0003d7750009d7ff000b +d7ffd73e0013d7090000d737000fd7ffd7a3000fd7120008d7110013d7ffd7400009d751 +0004d7080005d71c0004d7750009d7ffd700000ad7ffd73c0013d743000fd7ffd7a50010 +d7100008d7130013d7ffd73d0009d7520004d7080005d70b0007d706000bd7050008d761 +0009d7ffd700000bd7ffd7390013d7430010d7ffd7a8000fd70f0008d7150013d7ffd73a +0009d7530004d7080005d708000cd703000cd704000ad7600009d7ffd701000bd7ffd736 +0013d744000fd7ffd7ab0010d70d0008d7160014d7ffd7380009d7530004d7070005d709 +0003d7030004d7060004d7090002d7020005d75f0009d7ffd702000bd7ffd7330014d743 +0010d7ffd7ae000fd70c0008d7180014d7ffd7350009d7540004d7060005d7090003d705 +0004d7050004d7070003d7040005d75e0009d7ffd703000ad7ffd7310014d7120000d730 +000fd7ffd7b2000fd70a0008d71a0014d7ffd7320009d7550004d7030008d7090003d705 +0004d7050004d7060003d7060004d75e0009d7ffd703000bd7ffd72e0014d7140000d72e +000fd7ffd7b50010d7080008d71c0014d7ffd72f000ad755000ed70c0003d7060003d705 +0004d7060003d7070004d75d0009d7ffd704000bd7ffd72b0014d7160000d72c0010d7ff +d7b8000fd7070009d71d0014d7ffd72d0009d756000dd70d0003d7060003d7050004d706 +0002d7080004d75d0009d7ffd705000ad7ffd7290014d7180000d72b000fd7ffd7bb0010 +d7050009d71f0014d7ffd72a0009d757000dd70d0003d7050004d7050004d7060010d75d +0009d7ffd706000ad7ffd7260014d7450010d7ffd7be000fd7040009d7210014d7ffd727 +000ad7570004d7020006d7130007d7050004d7050011d75d0009d7ffd706000bd7ffd723 +0014d746000fd7ffd7c10010d7020009d7230014d7ffd7250009d7580004d7030005d711 +0009d7050004d7050003d76b0009d7ffd707000bd7ffd7200014d7460010d7ffd7c4000f +d7010009d7250014d7ffd7220009d7590004d7030006d70f0005d7000003d7050004d705 +0004d76a0009d7ffd708000ad7ffd71e0014d747000fd7ffd7c7001ad7270014d7ffd71f +0009d75a0004d7040006d70c0004d7030003d7050004d7050004d76a0009d7ffd708000b +d7ffd71b0014d7470010d7ffd7ca0018d7290014d7ffd71d0009d75a0004d7050005d70b +0003d7050003d7050004d7050004d76a0009d7ffd709000bd7ffd7180014d7240000d721 +0010d7ffd7ce0016d72b0014d7ffd71a0009d75b0004d7060005d7090003d7060003d705 +0004d7050004d70b0000d75d0009d7ffd70a000bd7ffd7150014d7260000d720000fd7ff +d7d10015d72d0014d7ffd7170009d75c0004d7060005d7080004d7060003d7050004d705 +0005d7090001d75d0009d7ffd70b000ad7ffd7130014d7280000d71e0010d7ffd7d40013 +d7300013d7ffd714000ad75c0004d7070006d7060003d7070003d7050004d7060005d708 +0001d75d0009d7ffd70b000bd7ffd7100013d72b0000d71d000fd7ffd7d70012d7320013 +d7ffd7120009d75d0004d7080006d7050004d7050004d7050004d7060006d7060002d75d +0009d7ffd70c000bd7ffd70d0013d74a0010d7ffd7da0010d7340013d7ffd70f0009d75e +0004d7090005d7050004d7040005d7020000d7010004d7030001d7000007d7040002d75e +0009d7ffd70d000bd7ffd70a0013d74a0010d7ffd7dd0010d7350013d7ffd70c0009d75f +0004d70a0005d7040006d701000ad7010005d7000002d702000ed75e0009d7ffd70e000a +d7ffd7080013d74b0010d7ffd7e00010d7350014d7ffd7090009d75e0006d7090007d702 +000ad7000007d7010009d703000cd75f0009d7ffd70e000bd7ffd7040014d74b0010d7ff +d7e4000fd7360014d7ffd7060009d75c000cd7070009d7000008d7010006d7030007d705 +0009d7610009d7ffd70f000bd7ffd7010014d74c000fd7ffd7e70010d7360014d7ffd703 +0009d75d000cd7080008d7020005d7020004d7060005d7080006d7620009d7ffd710000a +d7ff0014d7370000d7130010d7ffd7e90011d7360015d7ff000ad7ffd70d0009d7ffd711 +000ad7fb0015d7390000d7110010d7ffd7eb0012d7380014d7fd0009d7ffd70e0009d7ff +d711000bd7f80014d73c0000d7100010d7ffd7ec0014d7380014d7fa0009d7ffd70f0009 +d7ffd712000bd7f50014d73e0000d70e0010d7ffd7ee0015d7390014d7f70009d7ffd710 +0009d7ffd713000ad7f30014d74f000fd7ffd7f70010d7390015d7f40009d7ffd7100009 +d7ffd713000bd7ef0015d74f0010d7ffd7fa0010d73a0014d7f10009d7ffd7110009d7ff +d714000bd7ec0014d7500010d7ffd7fd0010d73b0014d7ee0009d7ffd7120009d7ffd715 +000bd7e90014d7510010d7ffd7ffd7000010d73b0014d7ec0009d7ffd7120009d7ffd716 +000ad7e70014d7510010d7ffd7ffd7040010d73c0014d7e80009d7ffd7130009d7ffd716 +000bd7e30014d74c0000d7040010d7ffd7ffd7070011d73c0014d7e50009d7ffd7140009 +d7ffd717000bd7e00014d74e0000d7020011d7ffd7ffd70a0011d73c0015d7e10009d7ff +d7150009d7ffd718000bd7dc0015d7500000d7000011d7ffd7ffd70d0012d73c0015d7df +0009d7ffd7150009d7ffd719000ad7da0015d7520012d7ffd7ffd7100012d73d0014d7dc +0009d7ffd7160009d7ffd719000bd7d70014d7530012d7ffd7ffd7140012d73d0015d7d8 +0009d7d80003d73a0009d7ffd71a000bd7d30015d7530012d7ffd7ffd7170012d73e0015 +d7d60009d72c0009d7130009d7820005d7390009d7450002d7140003d7920003d722000a +d7d10015d7530013d7ffd7ffd71a0012d73e0016d7d20009d72d0009d7130009d7820005 +d7390013d7140009d7190005d7130004d7910004d723000ad7cd0016d7530013d7ffd7ff +d71e0012d73f0015d7cf0009d7310007d7110007d7850005d7390013d7140009d7170007 +d7130005d7900005d722000bd7ca0015d7540013d7ffd7ffd7220012d73f0016d7cb0009 +d7320007d7110006d74e0001d7360004d7390009d7020007d7120006d71b0007d7130005 +d7900005d723000bd7c60016d7540013d7ffd7ffd7260012d73f0016d7c90009d7330007 +d70f0007d74e0001d7380000d73b0009d7040005d7120006d71e0004d7090000d7090003 +d7920003d725000ad7c40016d7540013d7ffd7ffd72a0012d73f0016d7c60009d7340007 +d70f0007d74e0001d7750009d7040006d7100006d71f0004d7090000d70a0001d7940001 +d726000bd7c10016d7540013d7ffd7ffd72e0012d7400016d7c20009d7350007d70e0008 +d74d0002d7750009d7040006d7100006d71f0004d7080001d7cb000bd7bd0016d7550013 +d7ffd7ffd7320012d7400016d7c00009d7350008d70d0008d74c0003d7750009d7040007 +d70e0007d71f0004d7080001d7cc000bd7ba0016d7550013d7ffd7ffd7360012d7400017 +d7bc0009d7360008d70c0009d74b0004d7750009d7040007d70e0007d71f0004d7070002 +d7cd000ad7b70017d7560012d7ffd7ffd73a0012d7410017d7b80009d7370002d7000005 +d70b0002d7000005d70c0003d70e0002d7040002d7100002d70b0005d70d0003d70e0002 +d7040002d70c0002d70d0003d7270009d7040008d70c0008d71f0004d7060003d7cd000b +d7b30017d7570012d7ffd7ffd73e0012d7410017d7b60009d7370002d7000005d70a0003 +d7000005d70a0008d7090004d7030005d70b0008d706000cd7060008d7090004d7030005 +d7080004d7090009d7250009d7040002d7000004d70c0002d7000004d71f0004d7050004 +d70b0001d7090001d7040001d70d0001d7030001d70a0003d7130002d7100001d70e0004 +d7010001d7080004d7010001d7080001d7090001d7050001d7110002d700000bd7b00017 +d7570012d7ffd7ffd7420012d7410018d7b20009d7380002d7010005d7090002d7010005 +d709000ad7060006d7010007d70a000ad705000cd705000ad7060006d7010007d7060006 +d708000bd7240009d7040002d7000005d70a0003d7000004d7040006d7040007d7060004 +d703000bd7040003d7070003d7020006d7080003d7020004d7060009d70b0009d7090008 +d709000ad706000ad7060003d7070003d7030005d70c0013d7ac0018d7570012d7ffd7ff +d7460012d7410019d7ae0009d7390002d7010005d7090002d7010005d7070004d7020005 +d7040007d7000009d7070004d7020005d7070004d7080004d7020005d7040007d7000009 +d7040007d7070003d7030005d7230009d7040002d7010004d70a0002d7010004d7040006 +d7040007d7060004d703000bd7020005d7050005d7010008d7050005d7010006d703000c +d709000bd707000ad707000bd705000bd7040005d7050005d7010008d7080016d7a90019 +d7570012d7ffd7ffd74a0012d7420019d7aa0009d73a0002d7020004d7080002d7020005 +d7070003d7050004d7030000d7000009d7010005d7060003d7050004d7060004d7080003 +d7050004d7030000d7010008d7010005d7030000d7010004d7060003d7050004d7230009 +d7040002d7010005d7080003d7010004d7070003d7070004d7060004d7060003d7060006 +d7040006d700000ad7030006d7000007d7020003d7040004d7080003d7030004d7060003 +d7030004d7050003d7040003d7040003d7040003d7030006d7040006d700000ad7070003 +d704000ed7a50019d7580012d7ffd7ffd74e0012d742001ad7a70009d73a0002d7020005 +d7070002d7020005d7060003d7060004d7060005d7050004d7050003d7060004d7060004 +d7070003d7060004d7060005d7050004d7060004d7050003d7060004d7230009d7040002 +d7020004d7080002d7020004d7070003d7070004d7060004d7060003d7060000d7000004 +d7040000d7000011d7020000d700000cd7030003d7050004d7060003d7050004d7050001 +d7060004d7040002d7060002d7040002d7060002d7030000d7000004d7040000d7000008 +d7010005d7060003d706000ed7a1001ad7580012d7ffd7ffd7520012d742001ad7a40009 +d73b0002d7030004d7060002d7030005d7050004d7070004d7050004d7060004d7050003 +d7070004d7050004d7060004d7070004d7050004d7060004d7060004d7050003d7060004 +d7230009d7040002d7020005d7060003d7020004d7070003d7070004d7060004d7060003 +d7090003d7070006d7030005d7050005d7010003d7020003d7060005d7040003d7060004 +d7040002d7070004d7020003d7060002d7030003d7060002d7060003d7070005d7040005 +d7050003d706000ed79f001ad7580012d7ffd7ffd7560012d742001bd7a00009d73c0002 +d7030005d7050002d7030005d7050003d7080005d7040004d7070003d7040004d7070005 +d7040004d7060003d7080005d7040004d7070003d7060004d7050003d7070003d7230009 +d7040002d7030004d7060002d7030004d7070003d7070004d7060004d7060003d7090003 +d7070004d7060005d7040004d7080004d7070004d7040003d7060004d7040002d7070004 +d7020003d7070001d7030003d7070001d7060003d7070003d7070004d7040004d706000f +d79b001bd7580012d7ffd7ffd75a0012d743001bd79d0009d73c0002d7040004d7040002 +d7040005d7050003d7090004d7040004d7070003d7040004d7080004d7040004d7060003 +d7090004d7040004d7070003d7060004d7050003d72f0009d7040002d7030005d7040003 +d7030004d7070003d7070004d7060004d7060003d7090003d7070003d7080004d7040003 +d7090003d7080005d7020004d7070003d7030003d7070004d7020004d7060001d7030004 +d7060001d7060003d7070003d7070004d7040004d707000fd797001bd7590012d7ffd7ff +d75e0012d744001bd7990009d73d0002d7040004d7040002d7040005d7040004d7090004 +d7040004d7070003d7030005d7080004d7040004d7050004d7090004d7040004d7070003 +d7060004d7040004d72f0009d7040002d7040004d7040002d7040004d7070003d7070004 +d7060004d7060003d7090003d7070003d7080004d7040003d7080004d7090004d7020003 +d7100010d7030006d7030001d7040006d7030001d7060003d7070003d7070004d7040004 +d7070003d700000bd793001bd75a0012d7ffd7ffd7620012d744001bd7960009d73e0002 +d7050004d7020002d7050005d7040004d7090004d7040004d7070003d7030005d7080004 +d7040004d7050004d7090004d7040004d7070003d7060004d7040004d72f0009d7040002 +d7040005d7020003d7040004d7070003d7070004d7060004d7060003d7090003d7070003 +d7080004d7040003d7080004d7090004d7020003d7100011d7020008d7080008d70a0003 +d7070003d7070004d7040004d7070003d701000ad791001bd75a0012d7ffd7ffd7660012 +d745001bd7920009d73f0002d7050004d7020002d7050005d7040004d7090005d7030004 +d7070003d7030005d7080005d7030004d7050004d7090005d7030004d7070003d7060004 +d7040004d72f0009d7040002d7050004d7020002d7050004d7070003d7070004d7060004 +d7060003d7090003d7070003d7090004d7030003d7080004d7090004d7020003d7100003 +d7110009d7070009d7080003d7070003d7070004d7040004d7070003d701000bd78d001b +d75b0012d7ffd7ffd76a0012d746001bd78f0009d73f0002d7060004d7000002d7060005 +d7040004d7090005d7030004d7070003d7030005d7090004d7030004d7050004d70a0004 +d7030004d7070003d7060004d7040004d72f0009d7040002d7050005d7000003d7050004 +d7070003d7070004d7060004d7060003d7090003d7070003d7090004d7030003d7080004 +d7090005d7010003d70f0004d7120009d7070009d7070003d7070003d7070004d7050003 +d7060004d702000bd789001bd75c0012d7ffd7ffd76e0012d747001bd78b0009d7400002 +d7060004d7000002d7060005d7040004d7090005d7030004d7070003d7030005d7090004 +d7030004d7050004d70a0004d7030004d7070003d7060004d7040004d72f0009d7040002 +d7060004d7000002d7060004d7070003d7070004d7060004d7060003d7090003d7070003 +d7090004d7030003d7080004d7090005d7010003d70f0004d7150006d70a0006d7070003 +d7070003d7070004d7060003d7050003d704000bd785001bd75d0012d7ffd7ffd7720012 +d748001bd7870009d7410002d7070006d7070005d7040005d7080004d7040004d7070003 +d7030005d7090003d7040004d7050005d7090003d7040004d7070003d7060004d7040004 +d70b0000d7220009d7040002d7060008d7060004d7070003d7070004d7060004d7060003 +d7090003d7070003d7090003d7040003d7080004d7090005d7010004d70f0003d7160006 +d70a0006d7060003d7070003d7070004d7060004d7030003d706000ad782001bd75e0012 +d7ffd7ffd7760012d748001cd7840009d7410002d7070006d7070005d7050004d7080004 +d7040004d7070003d7040004d7090003d7040004d7060004d7090003d7040004d7070003 +d7060004d7040004d70a0001d7220009d7040002d7070006d7070004d7070003d7070004 +d7060004d7060003d7090003d7070003d7090003d7040003d7080005d7080004d7020004 +d70b0000d7020003d70b0001d70a0005d70b0005d7050003d7070003d7070004d707000a +d707000bd77e001cd75e0012d7ffd7ffd77a0012d749001cd7800009d7420002d7080004 +d7080005d7050004d7080004d7040004d7070003d7040004d7090003d7040004d7060004 +d7090003d7040004d7070003d7060004d7050004d7090001d7220009d7040002d7070006 +d7070004d7070003d7070004d7060004d7060003d7090003d7070003d7090003d7040003 +d7080005d7080004d7020004d70a0001d7020004d7090002d7010001d7070004d7020001 +d7070004d7050003d7070003d7070004d7070007d70b000bd77a001cd75f0012d7ffd7ff +d77e0012d74a001cd77c0009d7430002d7080004d7080005d7050005d7070003d7050004 +d7070003d7050004d7070004d7040004d7060005d7070004d7040004d7070003d7060004 +d7050005d7060002d7230009d7040002d7080004d7080004d7070003d7070004d7060004 +d7060003d7090003d7070003d7090003d7040003d7080005d7080003d7030005d7080002 +d7020005d7080001d7020001d7080003d7020001d7080003d7050003d7070003d7070004 +d7050003d712000bd776001cd7600012d7ffd7ffd7820012d74b001cd7780009d7440002 +d7090002d7090005d7050005d7070003d7050004d7070003d7050004d7070003d7050004 +d7020002d7000005d7070003d7050004d7070003d7060004d7050008d7020003d7230009 +d7040002d7080004d7080004d7070004d7060004d7060004d7060004d7080003d7070003 +d7090002d7050003d7090005d7070003d7030006d7060002d7030006d7060002d7020002 +d7070003d7020002d7070003d7050003d7070003d7070004d7050002d714000ad772001d +d7610012d7ffd7ffd7860012d74b001dd7750009d7440002d7090002d7090005d7060005 +d7050003d7060004d7070004d7040005d7050003d7060009d7020005d7050003d7060004 +d7070004d7050004d707000cd7240009d7040002d7090002d7090005d7060005d7030006 +d7060004d7060004d7020001d7030003d7070004d7070003d7050004d7080005d7060004 +d7040008d7010004d7040008d7010004d7020003d7060003d7020003d7060003d7050003 +d7070003d7070004d704000cd70b000bd76e001ed7600013d7ffd7ffd78a0013d74b001d +d7710009d7430006d7080000d7090007d7070006d7000004d7060006d7050005d7060006 +d7010003d7080008d7040006d7010003d7060006d7050005d7040006d707000ad7250009 +d7030003d7090002d7090005d7060013d7030004d7060009d7030004d7060005d7050003 +d7060004d7090005d7050003d707000cd706000dd7030003d7050003d7030003d7050003 +d7060004d7060003d7070004d7040011d707000bd76a001ed7610013d7ffd7ffd78e0013 +d74c001dd76d0009d742000ad7060000d706000dd7060009d705000ad701000ad7050009 +d7090006d7080009d705000ad7010015d7060008d7260009d7020006d7080000d7080008 +d7060009d7000007d7020006d7050008d7030006d7050006d7020003d7060007d70a0006 +d7000004d709000ad708000bd7040006d7010003d7040006d7010003d7060006d7030006 +d7050006d7030012d707000ad767001ed7620013d7ffd7ffd7920013d74d001dd76a0009 +d7720005d7280004d70e0003d70a0005d7340003d7290015d7060000d706000dd7040007 +d7010005d702000ad7040006d702000ad703000cd706000ad709000ad70b0008d70b0008 +d705000bd705000bd705000ad7000009d701000ad7020012d707000ad763001ed7620014 +d7ffd7ffd7960013d74e001dd7660009d7ffd72e0009d72e0005d7020003d7160003d712 +0003d7010004d71f0005d7100003d70f0004d7080001d7010006d7060001d7010006d72c +0002d704000ad707000bd75f001ed7630014d7ffd7ffd79a0013d74f001dd7620009d7ff +d72f0009d7690003d7a80002d70e0001d708000bd75b001ed7640014d7ffd7ffd79e0014 +d74f001ed75e0008d7ffd7300009d7690003d7a80002d70e0001d709000ad757001fd765 +0014d7ffd7ffd7a20014d750001ed75a0009d7ffd7300009d7690003d7a70002d70e0002 +d709000bd753001fd7650015d7ffd7ffd7a60014d752001ed7550009d7ffd7310009d769 +0003d7a70003d70d0001d70b000bd74f001ed7670014d7ffd7ffd7ac0013d753001ed751 +0009d7ffd7320009d7690003d7a70006d7070004d70c000bd74a001fd7680014d7ffd7ff +d7b00013d754001fd74d0009d7ffd7320009d7690003d7a70012d70e000ad747001fd769 +0014d7ffd7ffd7b40014d754001fd7490009d7ffd7330009d7680005d7a7000fd710000b +d743001fd7690014d7ffd7ffd7b90014d755001fd7450009d7ffd7340009d765000ad7a7 +000cd712000bd73e0020d76a0014d7ffd7ffd7bd0015d7550020d7410008d7ffd7350009 +d765000ad7ab0004d717000bd73a0020d76a0015d7ffd7ffd7c20014d7560020d73d0009 +d7ffd7350009d7ffd73a000ad7370020d76b0015d7ffd7ffd7c60015d7570020d7380009 +d7ffd7360009d7ffd73a000bd7320020d76d0014d7ffd7ffd7cb0015d7580020d7340009 +d7ffd7370009d7ffd73b000bd72e0020d76d0015d7ffd7ffd7cf0016d7590020d7300009 +d7ffd7370009d7ffd73c000ad72a0020d76f0015d7ffd7ffd7d30016d75a0020d72c0009 +d7ffd7380009d7ffd73d000ad7250021d76f0016d7ffd7ffd7d80016d75b0020d7270009 +d7ffd7390009d7ffd73d000bd7210020d7710015d7ffd7ffd7dd0016d75c0020d7240009 +d7ffd7390009d7ffd73e000bd71c0020d7720016d7ffd7ffd7e10017d75c0021d71f0009 +d7ffd73a0009d7ffd73f000ad7180021d7730016d7ffd7ffd7e60016d75e0021d71a0009 +d7ffd73b0009d7ffd73f000bd7140020d7750016d7ffd7ffd7ea0017d75e0021d7170008 +d7ffd73c0009d7ffd740000bd70f0021d7750016d7ffd7ffd7ef0017d7600021d7120009 +d7ffd73c0009d7ffd741000bd70b0020d7770016d7ffd7ffd7f40017d7610020d70e0009 +d7ffd73d0009d7ffd742000ad7070021d7770017d7ffd7ffd7f80018d7620020d7090009 +d7ffd73e0009d7ffd742000bd7020021d7780017d7ffd7ffd7fd0018d7640020d7050009 +d7ffd73e0009d7ffd743002bd77a0017d7ffd7ffd7ffd7020018d7650020d7000009d7ff +d73f0009d7ffd7440026d77b0018d7ffd7ffd7ffd7060019d7660026d7ffd7400009d7ff +d7450021d77c0019d7ffd7ffd7ffd70a0019d7680021d7ffd7410009d7ffd7400022d77d +0019d7ffd7ffd7ffd7100019d7690022d7ffd73c0009d7ffd73c0022d77e001ad7ffd7ff +d7ffd714001ad76a0022d7ffd7380009d7ffd7380022d780001ad7ffd7ffd7ffd718001a +d76c0022d7ffd7340009d7ffd7330023d781001bd7ffd7ffd7ffd71d001ad76d0023d7ff +d72f0009d7ffd72f0023d782001bd7ffd7ffd7ffd723001ad76e0023d7ffd72b0009d7ff +d72b0026d780001bd7ffd7ffd7ffd728001ad7700024d7ffd7260009d7ffd726002bd77e +001ad7ffd7ffd7ffd72e001ad76e0028d7ffd7210009d7ffd7210024d7010009d77b001b +d7ffd7ffd7ffd733001ad76b002dd7ffd71c0009d7ffd71c0025d7050009d778001bd7ff +d7ffd7ffd739001ad7680008d7030025d7ffd7170009d7ffd7170025d70a0009d775001b +d7ffd7ffd7ffd73f001ad7650008d7070027d7ffd7110009d7ffd7110027d70e0009d772 +001bd7ffd7ffd7ffd744001cd7610008d70b0028d7ffd70c0009d7ffd70c0028d7120009 +d76f001bd7ffd7ffd7ffd74a001cd75e0008d7100028d7ffd7070009d7ffd7070028d717 +0009d76c001bd7ffd7ffd7ffd750001cd75b0008d7140029d7ffd7020009d7ffd7020029 +d71b0009d769001bd7ffd7ffd7ffd756001cd7580008d719002ad7fc0009d7fc002ad720 +0009d765001dd7ffd7ffd7ffd75a001dd7550008d71e002bd7f60009d7f6002bd7250009 +d762001dd7ffd7ffd7ffd760001dd7520008d723002cd7f00009d7f0002cd72a0009d75f +001dd7ffd7ffd7ffd766001ed74e0008d728002dd7ea0009d7ea002dd72f0009d75c001d +d7ffd7ffd7ffd76c001ed74b0008d72e002dd7e40009d7e4002dd7350009d759001dd7ff +d7ffd7ffd772001ed7480008d733002ed7de0009d7de002ed73a0009d756001dd7ffd7ff +d7ffd778001ed7450008d738002fd7d80009d7d8002fd73f0009d753001dd7ffd7ffd7ff +d77e001fd7410008d73d0031d7d10009d7d10031d7440009d74f001ed7ffd7ffd7ffd784 +001fd73e0008d7430033d7c90009d7c90033d74a0009d74c001ed7ffd7ffd7ffd78b001e +d73b0008d7490036d7c00009d7c00036d7500009d748001fd7ffd7ffd7ffd791001fd737 +0008d74f0038d7b80009d7b80038d7560009d745001fd7ffd7ffd7ffd797001fd7340008 +d755003ad7b00009d7b0003ad75c0009d7410020d7ffd7ffd7ffd79d001fd7310008d75b +003ed7a60009d7a6003ed7620009d73e0020d7ffd7ffd7ffd7a30020d72d0008d7610043 +d79b0009d79b0043d7680009d73b0020d7ffd7ffd7ffd7a90020d72a0008d7670048d790 +0009d7900048d76e0009d7370021d7ffd7ffd7ffd7af0020d7270008d76d004dd7850009 +d785004dd7740009d7340021d7ffd7ffd7ffd7b60020d7230008d7740051d77a0009d77a +0051d77b0009d7300021d7ffd7ffd7ffd7bd0020d7200008d77b0055d76f0009d76f0055 +d7820009d72d0021d7ffd7ffd7ffd7c40020d71c0008d7830057d7650009d7650057d78a +0009d7290021d7ffd7ffd7ffd7cb0021d7180008d78a005bd75a0009d75a005bd7910009 +d7250022d7ffd7ffd7ffd7d20021d7140008d7910065d7490009d7490065d7980009d721 +0022d7ffd7ffd7ffd7da0021d7100008d79a0072d7330009d7330072d7a10009d71d0022 +d7ffd7ffd7ffd7e10022d70c0008d7a500ff0041d7ac0009d7190023d7ffd7ffd7ffd7e8 +0022d7080008d7af00ff002dd7b60009d7150023d7ffd7ffd7ffd7ef0023d7040008d7ba +00ff0017d7c10009d7110024d7ffd7ffd7ffd7f60023d7000008d7c700fdd7ce0009d70d +0024d7ffd7ffd7ffd7fd002ad7d600dfd7dd0009d7090025d7ffd7ffd7ffd7ffd7040026 +d7e400c3d7eb0009d7050025d7ffd7ffd7ffd7ffd70c0024d7f100a5d7fa0009d7010025 +d7ffd7ffd7ffd7ffd7140025d7fb0087d7ffd709002dd7ffd7ffd7ffd7ffd71c0025d7ff +d7060069d7ffd7180029d7ffd7ffd7ffd7ffd7230027d7ffd7300009d7ffd7470027d7ff +d7ffd7ffd7ffd72b0027d7ffd72c0009d7ffd7430027d7ffd7ffd7ffd7ffd7330027d7ff +d7280009d7ffd73f0027d7ffd7ffd7ffd7ffd73b0028d7ffd7230009d7ffd73a0028d7ff +d7ffd7ffd7ffd7430028d7ffd71f0009d7ffd7360028d7ffd7ffd7ffd7ffd74b0029d7ff +d71a0009d7ffd7310029d7ffd7ffd7ffd7ffd7530029d7ffd7160009d7ffd72d0029d7ff +d7ffd7ffd7ffd75c0029d7ffd7110009d7ffd7280029d7ffd7ffd7ffd7ffd7650029d7ff +d70d0009d7ffd7240029d7ffd7ffd7ffd7ffd76e0029d7ffd7080009d7ffd71f0029d7ff +d7ffd7ffd7ffd7780029d7ffd7030009d7ffd71b0029d7ffd7ffd7ffd7ffd7800029d7ff +0009d7ffd7170029d7ffd7ffd7ffd7ffd7890029d7fa0009d7ffd7120029d7ffd7ffd7ff +d7ffd7920029d7f60009d7ffd70e0029d7ffd7ffd7ffd7ffd79b002ad7f00009d7ffd708 +002ad7ffd7ffd7ffd7ffd7a5002cd7e90009d7ffd701002cd7ffd7ffd7ffd7ffd7af002e +d7e20009d7fa002ed7ffd7ffd7ffd7ffd7b90030d7db0009d7f30030d7ffd7ffd7ffd7ff +d7c40031d7d40009d7ec0031d7ffd7ffd7ffd7ffd7cf0033d7cd0009d7e50033d7ffd7ff +d7ffd7ffd7d90035d7c60009d7de0035d7ffd7ffd7ffd7ffd7e30037d7bf0009d7d70037 +d7ffd7ffd7ffd7ffd7ee0038d7b80009d7d00038d7ffd7ffd7ffd7ffd7fa0039d7b10009 +d7c90039d7ffd7ffd7ffd7ffd7ffd706003ad7aa0009d7c2003ad7ffd7ffd7ffd7ffd7ff +d712003bd7a30009d7bb003bd7ffd7ffd7ffd7ffd7ffd71e003ed79a0009d7b2003ed7ff +d7ffd7ffd7ffd7ffd72a0043d78f0009d7a70043d7ffd7ffd7ffd7ffd7ffd7360047d785 +0009d79c0048d7ffd7ffd7ffd7ffd7ffd742004cd77a0009d791004dd7ffd7ffd7ffd7ff +d7ffd74f0050d76f0009d7860051d7ffd7ffd7ffd7ffd7ffd75d0054d7640009d77b0055 +d7ffd7ffd7ffd7ffd7ffd76b0058d7590009d7700058d7ffd7ffd7ffd7ffd7ffd77a005c +d74e0009d765005cd7ffd7ffd7ffd7ffd7ffd7880066d73d0009d7540066d7ffd7ffd7ff +d7ffd7ffd7980073d7270009d73e0073d7ffd7ffd7ffd7ffd7ffd7ac00ff0042d7ffd7ff +d7ffd7ffd7ffd7c200ff002dd7ffd7ffd7ffd7ffd7ffd7d700ff0017d7ffd7ffd7ffd7ff +d7ffd7ef00fdd7ffd7ffd7ffd7ffd7ffd7ffd70b00dfd7ffd7ffd7ffd7ffd7ffd7ffd728 +00c2d7ffd7ffd7ffd7ffd7ffd7ffd74a009cd7ffd7ffd7ffd7ffd7ffd7ffd7730070d7ff +d7ffd7ffd7ffd7ffd7ffd7ab002cd7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd7ffd75c + +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 213 495 508 +%%EOF diff --git a/doc/user/rtemspie.gif b/doc/user/rtemspie.gif Binary files differnew file mode 100644 index 0000000000..8341861b0d --- /dev/null +++ b/doc/user/rtemspie.gif diff --git a/doc/user/rtemspie.png b/doc/user/rtemspie.png Binary files differnew file mode 100644 index 0000000000..f6245ff45f --- /dev/null +++ b/doc/user/rtemspie.png diff --git a/doc/user/rtmon.t b/doc/user/rtmon.t new file mode 100644 index 0000000000..8ce6901c19 --- /dev/null +++ b/doc/user/rtmon.t @@ -0,0 +1,1183 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c Open Issues +@c - nicen up the tables +@c - use math mode to print formulas +@c + +@chapter Rate Monotonic Manager + +@cindex rate mononitonic tasks +@cindex periodic tasks + +@section Introduction + +The rate monotonic manager provides facilities to +implement tasks which execute in a periodic fashion. The +directives provided by the rate monotonic manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}rate_monotonic_create} - Create a rate monotonic period +@item @code{@value{DIRPREFIX}rate_monotonic_ident} - Get ID of a period +@item @code{@value{DIRPREFIX}rate_monotonic_cancel} - Cancel a period +@item @code{@value{DIRPREFIX}rate_monotonic_delete} - Delete a rate monotonic period +@item @code{@value{DIRPREFIX}rate_monotonic_period} - Conclude current/Start next period +@item @code{@value{DIRPREFIX}rate_monotonic_get_status} - Obtain status information on period +@end itemize + +@section Background + +The rate monotonic manager provides facilities to +manage the execution of periodic tasks. This manager was +designed to support application designers who utilize the Rate +Monotonic Scheduling Algorithm (RMS) to ensure that their +periodic tasks will meet their deadlines, even under transient +overload conditions. Although designed for hard real-time +systems, the services provided by the rate monotonic manager may +be used by any application which requires periodic tasks. + +@subsection Rate Monotonic Manager Required Support + +A clock tick is required to support the functionality provided by this manager. + +@subsection Rate Monotonic Manager Definitions + +@cindex periodic task, definition + +A periodic task is one which must be executed at a +regular interval. The interval between successive iterations of +the task is referred to as its period. Periodic tasks can be +characterized by the length of their period and execution time. +The period and execution time of a task can be used to determine +the processor utilization for that task. Processor utilization +is the percentage of processor time used and can be calculated +on a per-task or system-wide basis. Typically, the task's +worst-case execution time will be less than its period. For +example, a periodic task's requirements may state that it should +execute for 10 milliseconds every 100 milliseconds. Although +the execution time may be the average, worst, or best case, the +worst-case execution time is more appropriate for use when +analyzing system behavior under transient overload conditions. + +@cindex aperiodic task, definition + +In contrast, an aperiodic task executes at irregular +intervals and has only a soft deadline. In other words, the +deadlines for aperiodic tasks are not rigid, but adequate +response times are desirable. For example, an aperiodic task +may process user input from a terminal. + +@cindex sporadic task, definition + +Finally, a sporadic task is an aperiodic task with a +hard deadline and minimum interarrival time. The minimum +interarrival time is the minimum period of time which exists +between successive iterations of the task. For example, a +sporadic task could be used to process the pressing of a fire +button on a joystick. The mechanical action of the fire button +ensures a minimum time period between successive activations, +but the missile must be launched by a hard deadline. + +@subsection Rate Monotonic Scheduling Algorithm + +@cindex Rate Monotonic Scheduling Algorithm, definition +@cindex RMS Algorithm, definition + +The Rate Monotonic Scheduling Algorithm (RMS) is +important to real-time systems designers because it allows one +to guarantee that a set of tasks is schedulable. A set of tasks +is said to be schedulable if all of the tasks can meet their +deadlines. RMS provides a set of rules which can be used to +perform a guaranteed schedulability analysis for a task set. +This analysis determines whether a task set is schedulable under +worst-case conditions and emphasizes the predictability of the +system's behavior. It has been proven that: + +@itemize @code{ } +@b{RMS is an optimal static priority algorithm for +scheduling independent, preemptible, periodic tasks +on a single processor.} +@end itemize + +RMS is optimal in the sense that if a set of tasks +can be scheduled by any static priority algorithm, then RMS will +be able to schedule that task set. RMS bases it schedulability +analysis on the processor utilization level below which all +deadlines can be met. + +RMS calls for the static assignment of task +priorities based upon their period. The shorter a task's +period, the higher its priority. For example, a task with a 1 +millisecond period has higher priority than a task with a 100 +millisecond period. If two tasks have the same period, then RMS +does not distinguish between the tasks. However, RTEMS +specifies that when given tasks of equal priority, the task +which has been ready longest will execute first. RMS's priority +assignment scheme does not provide one with exact numeric values +for task priorities. For example, consider the following task +set and priority assignments: + +@ifset use-ascii +@example +@group ++--------------------+---------------------+---------------------+ +| Task | Period | Priority | +| | (in milliseconds) | | ++--------------------+---------------------+---------------------+ +| 1 | 100 | Low | ++--------------------+---------------------+---------------------+ +| 2 | 50 | Medium | ++--------------------+---------------------+---------------------+ +| 3 | 50 | Medium | ++--------------------+---------------------+---------------------+ +| 4 | 25 | High | ++--------------------+---------------------+---------------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\vrule\strut#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.25in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.25in{\enskip\hfil#\hfil}& +\vrule#\cr\noalign{\hrule} +&\bf Task&& \bf Period && \bf Priority &\cr +& && \bf (in milliseconds) && &\cr\noalign{\hrule} +& 1 && 100 && Low &\cr\noalign{\hrule} +& 2 && 50 && Medium &\cr\noalign{\hrule} +& 3 && 50 && Medium &\cr\noalign{\hrule} +& 4 && 25 && High &\cr\noalign{\hrule} +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=3 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Task</STRONG></TD> + <TD ALIGN=center><STRONG>Period (in milliseconds)</STRONG></TD> + <TD ALIGN=center><STRONG>Priority</STRONG></TD></TR> +<TR><TD ALIGN=center>1</TD> + <TD ALIGN=center>100 </TD> + <TD ALIGN=center>Low</TD></TR> +<TR><TD ALIGN=center>2</TD> + <TD ALIGN=center>50 </TD> + <TD ALIGN=center>Medium</TD></TR> +<TR><TD ALIGN=center>3</TD> + <TD ALIGN=center>50 </TD> + <TD ALIGN=center>Medium</TD></TR> +<TR><TD ALIGN=center>4</TD> + <TD ALIGN=center>25 </TD> + <TD ALIGN=center>High</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +RMS only calls for task 1 to have the lowest +priority, task 4 to have the highest priority, and tasks 2 and 3 +to have an equal priority between that of tasks 1 and 4. The +actual RTEMS priorities assigned to the tasks must only adhere +to those guidelines. + +Many applications have tasks with both hard and soft +deadlines. The tasks with hard deadlines are typically referred +to as the critical task set, with the soft deadline tasks being +the non-critical task set. The critical task set can be +scheduled using RMS, with the non-critical tasks not executing +under transient overload, by simply assigning priorities such +that the lowest priority critical task (i.e. longest period) has +a higher priority than the highest priority non-critical task. +Although RMS may be used to assign priorities to the +non-critical tasks, it is not necessary. In this instance, +schedulability is only guaranteed for the critical task set. + +@subsection Schedulability Analysis + +@cindex RMS schedulability analysis + +RMS allows application designers to ensure that tasks +can meet all deadlines, even under transient overload, without +knowing exactly when any given task will execute by applying +proven schedulability analysis rules. + +@subsubsection Assumptions + +The schedulability analysis rules for RMS were +developed based on the following assumptions: + + +@itemize @bullet +@item The requests for all tasks for which hard deadlines +exist are periodic, with a constant interval between requests. + +@item Each task must complete before the next request for it +occurs. + +@item The tasks are independent in that a task does not depend +on the initiation or completion of requests for other tasks. + +@item The execution time for each task without preemption or +interruption is constant and does not vary. + +@item Any non-periodic tasks in the system are special. These +tasks displace periodic tasks while executing and do not have +hard, critical deadlines. +@end itemize + +Once the basic schedulability analysis is understood, +some of the above assumptions can be relaxed and the +side-effects accounted for. + +@subsubsection Processor Utilization Rule + +@cindex RMS Processor Utilization Rule + +The Processor Utilization Rule requires that +processor utilization be calculated based upon the period and +execution time of each task. The fraction of processor time +spent executing task index is Time(index) / Period(index). The +processor utilization can be calculated as follows: + +@example +@group +Utilization = 0 + +for index = 1 to maximum_tasks + Utilization = Utilization + (Time(index)/Period(index)) +@end group +@end example + +To ensure schedulability even under transient +overload, the processor utilization must adhere to the following +rule: + +@example +Utilization = maximum_tasks * (2(1/maximum_tasks) - 1) +@end example + +As the number of tasks increases, the above formula +approaches ln(2) for a worst-case utilization factor of +approximately 0.693. Many tasks sets can be scheduled with a +greater utilization factor. In fact, the average processor +utilization threshold for a randomly generated task set is +approximately 0.88. + +@subsubsection Processor Utilization Rule Example + +This example illustrates the application of the +Processor Utilization Rule to an application with three critical +periodic tasks. The following table details the RMS priority, +period, execution time, and processor utilization for each task: + +@ifset use-ascii +@example +@group + +------------+----------+--------+-----------+-------------+ + | Task | RMS | Period | Execution | Processor | + | | Priority | | Time | Utilization | + +------------+----------+--------+-----------+-------------+ + | 1 | High | 100 | 15 | 0.15 | + +------------+----------+--------+-----------+-------------+ + | 2 | Medium | 200 | 50 | 0.25 | + +------------+----------+--------+-----------+-------------+ + | 3 | Low | 300 | 100 | 0.33 | + +------------+----------+--------+-----------+-------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\vrule\strut#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.00in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.00in{\enskip\hfil#\hfil}& +\vrule#\cr\noalign{\hrule} +&\bf Task&& \bf RMS && \bf Period && \bf Execution &&\bf Processor&\cr +& && \bf Priority && &&\bf Time &&\bf Utilization &\cr\noalign{\hrule} +& 1 && High && 100 && 15 && 0.15 &\cr\noalign{\hrule} +& 2 && Medium && 200 && 50 && 0.25 &\cr\noalign{\hrule} +& 3 && Low && 300 && 100 && 0.33 &\cr\noalign{\hrule} +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=5 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Task</STRONG></TD> + <TD ALIGN=center><STRONG>RMS Priority</STRONG></TD> + <TD ALIGN=center><STRONG>Period</STRONG></TD> + <TD ALIGN=center><STRONG>Execution Time</STRONG></TD> + <TD ALIGN=center><STRONG>Processor Utilization</STRONG></TD></TR> +<TR><TD ALIGN=center>1</TD> + <TD ALIGN=center>High</TD> + <TD ALIGN=center>100</TD> + <TD ALIGN=center>15</TD> + <TD ALIGN=center>0.15</TD></TR> +<TR><TD ALIGN=center>2</TD> + <TD ALIGN=center>Medium</TD> + <TD ALIGN=center>200</TD> + <TD ALIGN=center>50</TD> + <TD ALIGN=center>0.25</TD></TR> +<TR><TD ALIGN=center>3</TD> + <TD ALIGN=center>Low</TD> + <TD ALIGN=center>300</TD> + <TD ALIGN=center>100</TD> + <TD ALIGN=center>0.33</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +The total processor utilization for this task set is +0.73 which is below the upper bound of 3 * (2(1/3) - 1), or +0.779, imposed by the Processor Utilization Rule. Therefore, +this task set is guaranteed to be schedulable using RMS. + +@subsubsection First Deadline Rule + +@cindex RMS First Deadline Rule + +If a given set of tasks do exceed the processor +utilization upper limit imposed by the Processor Utilization +Rule, they can still be guaranteed to meet all their deadlines +by application of the First Deadline Rule. This rule can be +stated as follows: + +For a given set of independent periodic tasks, if +each task meets its first deadline when all tasks are started at +the same time, then the deadlines will always be met for any +combination of start times. + +A key point with this rule is that ALL periodic tasks +are assumed to start at the exact same instant in time. +Although this assumption may seem to be invalid, RTEMS makes it +quite easy to ensure. By having a non-preemptible user +initialization task, all application tasks, regardless of +priority, can be created and started before the initialization +deletes itself. This technique ensures that all tasks begin to +compete for execution time at the same instant -- when the user +initialization task deletes itself. + +@subsubsection First Deadline Rule Example + +The First Deadline Rule can ensure schedulability +even when the Processor Utilization Rule fails. The example +below is a modification of the Processor Utilization Rule +example where task execution time has been increased from 15 to +25 units. The following table details the RMS priority, period, +execution time, and processor utilization for each task: + +@ifset use-ascii +@example +@group + +------------+----------+--------+-----------+-------------+ + | Task | RMS | Period | Execution | Processor | + | | Priority | | Time | Utilization | + +------------+----------+--------+-----------+-------------+ + | 1 | High | 100 | 25 | 0.25 | + +------------+----------+--------+-----------+-------------+ + | 2 | Medium | 200 | 50 | 0.25 | + +------------+----------+--------+-----------+-------------+ + | 3 | Low | 300 | 100 | 0.33 | + +------------+----------+--------+-----------+-------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\vrule\strut#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.00in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.00in{\enskip\hfil#\hfil}& +\vrule#\cr\noalign{\hrule} +&\bf Task&& \bf RMS && \bf Period && \bf Execution &&\bf Processor&\cr +& && \bf Priority && &&\bf Time &&\bf Utilization &\cr\noalign{\hrule} +& 1 && High && 100 && 25 && 0.25 &\cr\noalign{\hrule} +& 2 && Medium && 200 && 50 && 0.25 &\cr\noalign{\hrule} +& 3 && Low && 300 && 100 && 0.33 &\cr\noalign{\hrule} +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=5 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Task</STRONG></TD> + <TD ALIGN=center><STRONG>RMS Priority</STRONG></TD> + <TD ALIGN=center><STRONG>Period</STRONG></TD> + <TD ALIGN=center><STRONG>Execution Time</STRONG></TD> + <TD ALIGN=center><STRONG>Processor Utilization</STRONG></TD></TR> +<TR><TD ALIGN=center>1</TD> + <TD ALIGN=center>High</TD> + <TD ALIGN=center>100</TD> + <TD ALIGN=center>25</TD> + <TD ALIGN=center>0.25</TD></TR> +<TR><TD ALIGN=center>2</TD> + <TD ALIGN=center>Medium</TD> + <TD ALIGN=center>200</TD> + <TD ALIGN=center>50</TD> + <TD ALIGN=center>0.25</TD></TR> +<TR><TD ALIGN=center>3</TD> + <TD ALIGN=center>Low</TD> + <TD ALIGN=center>300</TD> + <TD ALIGN=center>100</TD> + <TD ALIGN=center>0.33</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +The total processor utilization for the modified task +set is 0.83 which is above the upper bound of 3 * (2(1/3) - 1), +or 0.779, imposed by the Processor Utilization Rule. Therefore, +this task set is not guaranteed to be schedulable using RMS. +However, the First Deadline Rule can guarantee the +schedulability of this task set. This rule calls for one to +examine each occurrence of deadline until either all tasks have +met their deadline or one task failed to meet its first +deadline. The following table details the time of each deadline +occurrence, the maximum number of times each task may have run, +the total execution time, and whether all the deadlines have +been met. + +@ifset use-ascii +@example +@group ++----------+------+------+------+----------------------+---------------+ +| Deadline | Task | Task | Task | Total | All Deadlines | +| Time | 1 | 2 | 3 | Execution Time | Met? | ++----------+------+------+------+----------------------+---------------+ +| 100 | 1 | 1 | 1 | 25 + 50 + 100 = 175 | NO | ++----------+------+------+------+----------------------+---------------+ +| 200 | 2 | 1 | 1 | 50 + 50 + 100 = 200 | YES | ++----------+------+------+------+----------------------+---------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\vrule\strut#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 0.75in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 2.00in{\enskip\hfil#\hfil}& +\vrule#& +\hbox to 1.00in{\enskip\hfil#\hfil}& +\vrule#\cr\noalign{\hrule} +&\bf Deadline&& \bf Task &&\bf Task&&\bf Task&&\bf Total &&\bf All Deadlines &\cr +&\bf Time && \bf 1 &&\bf 2 &&\bf 3 &&\bf Execution Time &&\bf Net?&\cr\noalign{\hrule} +& 100&& 1 && 1 && 1 && 25 + 50 + 100 = 175 && NO &\cr\noalign{\hrule} +& 200&& 2 && 1 && 1 && 50 + 50 + 100 = 200 && YES &\cr\noalign{\hrule} +}}\hfil} +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=6 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Deadline Time</STRONG></TD> + <TD ALIGN=center><STRONG>Task 1</STRONG></TD> + <TD ALIGN=center><STRONG>Task 2</STRONG></TD> + <TD ALIGN=center><STRONG>Task 3</STRONG></TD> + <TD ALIGN=center><STRONG>Total Execution Time</STRONG></TD> + <TD ALIGN=center><STRONG>All Deadlines Met?</STRONG></TD></TR> +<TR><TD ALIGN=center>100</TD> + <TD ALIGN=center>1</TD> + <TD ALIGN=center>1</TD> + <TD ALIGN=center>1</TD> + <TD ALIGN=center>25 + 50 + 100 = 175</TD> + <TD ALIGN=center>NO</TD></TR> +<TR><TD ALIGN=center>200</TD> + <TD ALIGN=center>2</TD> + <TD ALIGN=center>1</TD> + <TD ALIGN=center>1</TD> + <TD ALIGN=center>50 + 50 + 100 = 175</TD> + <TD ALIGN=center>YES</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +The key to this analysis is to recognize when each +task will execute. For example at time 100, task 1 must have +met its first deadline, but tasks 2 and 3 may also have begun +execution. In this example, at time 100 tasks 1 and 2 have +completed execution and thus have met their first deadline. +Tasks 1 and 2 have used (25 + 50) = 75 time units, leaving (100 +- 75) = 25 time units for task 3 to begin. Because task 3 takes +100 ticks to execute, it will not have completed execution at +time 100. Thus at time 100, all of the tasks except task 3 have +met their first deadline. + +At time 200, task 1 must have met its second deadline +and task 2 its first deadline. As a result, of the first 200 +time units, task 1 uses (2 * 25) = 50 and task 2 uses 50, +leaving (200 - 100) time units for task 3. Task 3 requires 100 +time units to execute, thus it will have completed execution at +time 200. Thus, all of the tasks have met their first deadlines +at time 200, and the task set is schedulable using the First +Deadline Rule. + +@subsubsection Relaxation of Assumptions + +The assumptions used to develop the RMS +schedulability rules are uncommon in most real-time systems. +For example, it was assumed that tasks have constant unvarying +execution time. It is possible to relax this assumption, simply +by using the worst-case execution time of each task. + +Another assumption is that the tasks are independent. +This means that the tasks do not wait for one another or +contend for resources. This assumption can be relaxed by +accounting for the amount of time a task spends waiting to +acquire resources. Similarly, each task's execution time must +account for any I/O performed and any RTEMS directive calls. + +In addition, the assumptions did not account for the +time spent executing interrupt service routines. This can be +accounted for by including all the processor utilization by +interrupt service routines in the utilization calculation. +Similarly, one should also account for the impact of delays in +accessing local memory caused by direct memory access and other +processors accessing local dual-ported memory. + +The assumption that nonperiodic tasks are used only +for initialization or failure-recovery can be relaxed by placing +all periodic tasks in the critical task set. This task set can +be scheduled and analyzed using RMS. All nonperiodic tasks are +placed in the non-critical task set. Although the critical task +set can be guaranteed to execute even under transient overload, +the non-critical task set is not guaranteed to execute. + +In conclusion, the application designer must be fully +cognizant of the system and its run-time behavior when +performing schedulability analysis for a system using RMS. +Every hardware and software factor which impacts the execution +time of each task must be accounted for in the schedulability +analysis. + +@subsubsection Further Reading + +For more information on Rate Monotonic Scheduling and +its schedulability analysis, the reader is referred to the +following: + +@itemize @code{ } +@item @cite{C. L. Liu and J. W. Layland. "Scheduling Algorithms for +Multiprogramming in a Hard Real Time Environment." @b{Journal of +the Association of Computing Machinery}. January 1973. pp. 46-61.} + +@item @cite{John Lehoczky, Lui Sha, and Ye Ding. "The Rate Monotonic +Scheduling Algorithm: Exact Characterization and Average Case +Behavior." @b{IEEE Real-Time Systems Symposium}. 1989. pp. 166-171.} + +@item @cite{Lui Sha and John Goodenough. "Real-Time Scheduling +Theory and Ada." @b{IEEE Computer}. April 1990. pp. 53-62.} + +@item @cite{Alan Burns. "Scheduling hard real-time systems: a +review." @b{Software Engineering Journal}. May 1991. pp. 116-128.} +@end itemize + +@section Operations + +@subsection Creating a Rate Monotonic Period + +The @code{@value{DIRPREFIX}rate_monotonic_create} directive creates a rate +monotonic period which is to be used by the calling task to +delineate a period. RTEMS allocates a Period Control Block +(PCB) from the PCB free list. This data structure is used by +RTEMS to manage the newly created rate monotonic period. RTEMS +returns a unique period ID to the application which is used by +other rate monotonic manager directives to access this rate +monotonic period. + +@subsection Manipulating a Period + +The @code{@value{DIRPREFIX}rate_monotonic_period} directive is used to +establish and maintain periodic execution utilizing a previously +created rate monotonic period. Once initiated by the +@code{@value{DIRPREFIX}rate_monotonic_period} directive, the period is +said to run until it either expires or is reinitiated. The state of the rate +monotonic period results in one of the following scenarios: + +@itemize @bullet +@item If the rate monotonic period is running, the calling +task will be blocked for the remainder of the outstanding period +and, upon completion of that period, the period will be +reinitiated with the specified period. + +@item If the rate monotonic period is not currently running +and has not expired, it is initiated with a length of period +ticks and the calling task returns immediately. + +@item If the rate monotonic period has expired before the task +invokes the @code{@value{DIRPREFIX}rate_monotonic_period} directive, +the period will be initiated with a length of period ticks and the calling task +returns immediately with a timeout error status. + +@end itemize + +@subsection Obtaining the Status of a Period + +If the @code{@value{DIRPREFIX}rate_monotonic_period} directive is invoked +with a period of @code{@value{RPREFIX}PERIOD_STATUS} ticks, the current +state of the specified rate monotonic period will be returned. The following +table details the relationship between the period's status and +the directive status code returned by the +@code{@value{DIRPREFIX}rate_monotonic_period} +directive: + +@itemize @bullet +@item @code{@value{RPREFIX}SUCCESSFUL} - period is running + +@item @code{@value{RPREFIX}TIMEOUT} - period has expired + +@item @code{@value{RPREFIX}NOT_DEFINED} - period has never been initiated +@end itemize + +Obtaining the status of a rate monotonic period does +not alter the state or length of that period. + +@subsection Canceling a Period + +The @code{@value{DIRPREFIX}rate_monotonic_cancel} directive is used to stop +the period maintained by the specified rate monotonic period. +The period is stopped and the rate monotonic period can be +reinitiated using the @code{@value{DIRPREFIX}rate_monotonic_period} directive. + +@subsection Deleting a Rate Monotonic Period + +The @code{@value{DIRPREFIX}rate_monotonic_delete} directive is used to delete +a rate monotonic period. If the period is running and has not +expired, the period is automatically canceled. The rate +monotonic period's control block is returned to the PCB free +list when it is deleted. A rate monotonic period can be deleted +by a task other than the task which created the period. + +@subsection Examples + +The following sections illustrate common uses of rate +monotonic periods to construct periodic tasks. + +@subsection Simple Periodic Task + +This example consists of a single periodic task +which, after initialization, executes every 100 clock ticks. + +@page +@example +rtems_task Periodic_task(rtems_task_argument arg) +@{ + rtems_name name; + rtems_id period; + rtems_status_code status; + + name = rtems_build_name( 'P', 'E', 'R', 'D' ); + + status = rtems_rate_monotonic_create( name, &period ); + if ( status != RTEMS_STATUS_SUCCESSFUL ) @{ + printf( "rtems_monotonic_create failed with status of %d.\n", rc ); + exit( 1 ); + @} + + + while ( 1 ) @{ + if ( rtems_rate_monotonic_period( period, 100 ) == RTEMS_TIMEOUT ) + break; + + /* Perform some periodic actions */ + @} + + /* missed period so delete period and SELF */ + + status = rtems_rate_monotonic_delete( period ); + if ( status != RTEMS_STATUS_SUCCESSFUL ) @{ + printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status ); + exit( 1 ); + @} + + status = rtems_task_delete( SELF ); /* should not return */ + printf( "rtems_task_delete returned with status of %d.\n", status ); + exit( 1 ); +@} +@end example + + +The above task creates a rate monotonic period as +part of its initialization. The first time the loop is +executed, the @code{@value{DIRPREFIX}rate_monotonic_period} +directive will initiate the period for 100 ticks and return +immediately. Subsequent invocations of the +@code{@value{DIRPREFIX}rate_monotonic_period} directive will result +in the task blocking for the remainder of the 100 tick period. +If, for any reason, the body of the loop takes more than 100 +ticks to execute, the @code{@value{DIRPREFIX}rate_monotonic_period} +directive will return the @code{@value{RPREFIX}TIMEOUT} status. +If the above task misses its deadline, it will delete the rate +monotonic period and itself. + +@subsection Task with Multiple Periods + +This example consists of a single periodic task +which, after initialization, performs two sets of actions every +100 clock ticks. The first set of actions is performed in the +first forty clock ticks of every 100 clock ticks, while the +second set of actions is performed between the fortieth and +seventieth clock ticks. The last thirty clock ticks are not +used by this task. + +@page +@example +rtems_task Periodic_task(rtems_task_argument arg) +@{ + rtems_name name_1, name_2; + rtems_id period_1, period_2; + rtems_status_code status; + + name_1 = rtems_build_name( 'P', 'E', 'R', '1' ); + name_2 = rtems_build_name( 'P', 'E', 'R', '2' ); + + (void ) rtems_rate_monotonic_create( name_1, &period_1 ); + (void ) rtems_rate_monotonic_create( name_2, &period_2 ); + + while ( 1 ) @{ + if ( rtems_rate_monotonic_period( period_1, 100 ) == TIMEOUT ) + break; + + if ( rtems_rate_monotonic_period( period_2, 40 ) == TIMEOUT ) + break; + + /* + * Perform first set of actions between clock + * ticks 0 and 39 of every 100 ticks. + */ + + if ( rtems_rate_monotonic_period( period_2, 30 ) == TIMEOUT ) + break; + + /* + * Perform second set of actions between clock 40 and 69 + * of every 100 ticks. THEN ... + * + * Check to make sure we didn't miss the period_2 period. + */ + + if ( rtems_rate_monotonic_period( period_2, STATUS ) == TIMEOUT ) + break; + + (void) rtems_rate_monotonic_cancel( period_2 ); + @} + + /* missed period so delete period and SELF */ + + (void ) rtems_rate_monotonic_delete( period_1 ); + (void ) rtems_rate_monotonic_delete( period_2 ); + (void ) task_delete( SELF ); +@} +@end example + +The above task creates two rate monotonic periods as +part of its initialization. The first time the loop is +executed, the @code{@value{DIRPREFIX}rate_monotonic_period} +directive will initiate the period_1 period for 100 ticks +and return immediately. Subsequent invocations of the +@code{@value{DIRPREFIX}rate_monotonic_period} directive +for period_1 will result in the task blocking for the remainder +of the 100 tick period. The period_2 period is used to control +the execution time of the two sets of actions within each 100 +tick period established by period_1. The +@code{@value{DIRPREFIX}rate_monotonic_cancel( period_2 )} +call is performed to ensure that the period_2 period +does not expire while the task is blocked on the period_1 +period. If this cancel operation were not performed, every time +the @code{@value{DIRPREFIX}rate_monotonic_period( period_2, 40 )} +call is executed, except for the initial one, a directive status +of @code{@value{RPREFIX}TIMEOUT} is returned. It is important to +note that every time this call is made, the period_2 period will be +initiated immediately and the task will not block. + +If, for any reason, the task misses any deadline, the +@code{@value{DIRPREFIX}rate_monotonic_period} directive will +return the @code{@value{RPREFIX}TIMEOUT} +directive status. If the above task misses its deadline, it +will delete the rate monotonic periods and itself. + +@section Directives + +This section details the rate monotonic manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_CREATE - Create a rate monotonic period + +@cindex create a period + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_create +@example +rtems_status_code rtems_rate_monotonic_create( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Create ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - rate monotonic period created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}TOO_MANY} - too many periods created + +@subheading DESCRIPTION: + +This directive creates a rate monotonic period. The +assigned rate monotonic id is returned in id. This id is used +to access the period with other rate monotonic manager +directives. For control and maintenance of the rate monotonic +period, RTEMS allocates a PCB from the local PCB free pool and +initializes it. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_IDENT - Get ID of a period + +@cindex get ID of a period +@cindex obtain ID of a period + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_ident +@example +rtems_status_code rtems_rate_monotonic_ident( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Ident ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - period identified successfully@* +@code{@value{RPREFIX}INVALID_NAME} - period name not found + +@subheading DESCRIPTION: + +This directive obtains the period id associated with +the period name to be acquired. If the period name is not +unique, then the period id will match one of the periods with +that name. However, this period id is not guaranteed to +correspond to the desired period. The period id is used to +access this period in other rate monotonic manager directives. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_CANCEL - Cancel a period + +@cindex cancel a period + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_cancel +@example +rtems_status_code rtems_rate_monotonic_cancel( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Cancel ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - period canceled successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid rate monotonic period id@* +@code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - rate monotonic period not created by calling task + +@subheading DESCRIPTION: + +This directive cancels the rate monotonic period id. +This period will be reinitiated by the next invocation of +@code{@value{DIRPREFIX}rate_monotonic_period} with id. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +The rate monotonic period specified by id must have +been created by the calling task. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_DELETE - Delete a rate monotonic period + +@cindex delete a period + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_delete +@example +rtems_status_code rtems_rate_monotonic_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - period deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid rate monotonic period id + +@subheading DESCRIPTION: + +This directive deletes the rate monotonic period +specified by id. If the period is running, it is automatically +canceled. The PCB for the deleted period is reclaimed by RTEMS. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +A rate monotonic period can be deleted by a task +other than the task which created the period. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_PERIOD - Conclude current/Start next period + +@cindex conclude current period +@cindex start current period +@cindex period initiation + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_period +@example +rtems_status_code rtems_rate_monotonic_period( + rtems_id id, + rtems_interval length +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Period ( + ID : in RTEMS.ID; + Length : in RTEMS.Interval; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - period initiated successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid rate monotonic period id@* +@code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - period not created by calling task@* +@code{@value{RPREFIX}NOT_DEFINED} - period has never been initiated (only +possible when period is set to PERIOD_STATUS)@* +@code{@value{RPREFIX}TIMEOUT} - period has expired + +@subheading DESCRIPTION: + +This directive initiates the rate monotonic period id +with a length of period ticks. If id is running, then the +calling task will block for the remainder of the period before +reinitiating the period with the specified period. If id was +not running (either expired or never initiated), the period is +immediately initiated and the directive returns immediately. + +If invoked with a period of @code{@value{RPREFIX}PERIOD_STATUS} ticks, the +current state of id will be returned. The directive status +indicates the current state of the period. This does not alter +the state or period of the period. + +@subheading NOTES: + +This directive will not cause the running task to be preempted. + +@c +@c +@c +@page +@subsection RATE_MONOTONIC_GET_STATUS - Obtain status information on period + +@cindex get status of period +@cindex obtain status of period + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_rate_monotonic_get_status +@example +rtems_status_code rtems_rate_monotonic_get_status( + rtems_id id, + rtems_rate_monotonic_period_status *status +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Rate_Monotonic_Get_Status ( + ID : in RTEMS.ID; + Status : out RTEMS.Rate_Monotonic_Period_Status; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - period initiated successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid rate monotonic period id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - invalid address of status@* + +@subheading DESCRIPTION: + +This directive returns status information associated with +the rate monotonic period id in the following data @value{STRUCTURE}: + +@ifset is-C +@findex rtems_rate_monotonic_period_status +@example +typedef struct @{ + rtems_rate_monotonic_period_states state; + rtems_unsigned32 ticks_since_last_period; + rtems_unsigned32 ticks_executed_since_last_period; +@} rtems_rate_monotonic_period_status; +@end example +@end ifset + +@ifset is-Ada +@example +type Rate_Monotonic_Period_Status is + begin + State : RTEMS.Rate_Monotonic_Period_States; + Ticks_Since_Last_Period : RTEMS.Unsigned32; + Ticks_Executed_Since_Last_Period : RTEMS.Unsigned32; + end record; +@end example +@end ifset + +@c RATE_MONOTONIC_INACTIVE does not have RTEMS_ in front of it. + +If the period's state is @code{RATE_MONOTONIC_INACTIVE}, both +ticks_since_last_period and ticks_executed_since_last_period +will be set to 0. Otherwise, ticks_since_last_period will +contain the number of clock ticks which have occurred since +the last invocation of the +@code{@value{DIRPREFIX}rate_monotonic_period} directive. +Also in this case, the ticks_executed_since_last_period will indicate +how much processor time the owning task has consumed since the invocation +of the @code{@value{DIRPREFIX}rate_monotonic_period} directive. + +@subheading NOTES: + +This directive will not cause the running task to be preempted. diff --git a/doc/user/schedule.t b/doc/user/schedule.t new file mode 100644 index 0000000000..1aa2b4d72c --- /dev/null +++ b/doc/user/schedule.t @@ -0,0 +1,407 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c This figure is not included: +@c Figure 17-1 RTEMS Task State Transitions +@c + +@chapter Scheduling Concepts + +@cindex scheduling +@cindex task scheduling + +@section Introduction + +The concept of scheduling in real-time systems +dictates the ability to provide immediate response to specific +external events, particularly the necessity of scheduling tasks +to run within a specified time limit after the occurrence of an +event. For example, software embedded in life-support systems +used to monitor hospital patients must take instant action if a +change in the patient's status is detected. + +The component of RTEMS responsible for providing this +capability is appropriately called the scheduler. The +scheduler's sole purpose is to allocate the all important +resource of processor time to the various tasks competing for +attention. The RTEMS scheduler allocates the processor using a +priority-based, preemptive algorithm augmented to provide +round-robin characteristics within individual priority groups. +The goal of this algorithm is to guarantee that the task which +is executing on the processor at any point in time is the one +with the highest priority among all tasks in the ready state. + +There are two common methods of accomplishing the +mechanics of this algorithm. Both ways involve a list or chain +of tasks in the ready state. One method is to randomly place +tasks in the ready chain forcing the scheduler to scan the +entire chain to determine which task receives the processor. +The other method is to schedule the task by placing it in the +proper place on the ready chain based on the designated +scheduling criteria at the time it enters the ready state. +Thus, when the processor is free, the first task on the ready +chain is allocated the processor. RTEMS schedules tasks using +the second method to guarantee faster response times to external +events. + +@section Scheduling Mechanisms + +@cindex scheduling mechanisms + +RTEMS provides four mechanisms which allow the user +to impact the task scheduling process: + +@itemize @bullet +@item user-selectable task priority level +@item task preemption control +@item task timeslicing control +@item manual round-robin selection +@end itemize + +Each of these methods provides a powerful capability +to customize sets of tasks to satisfy the unique and particular +requirements encountered in custom real-time applications. +Although each mechanism operates independently, there is a +precedence relationship which governs the effects of scheduling +modifications. The evaluation order for scheduling +characteristics is always priority, preemption mode, and +timeslicing. When reading the descriptions of timeslicing and +manual round-robin it is important to keep in mind that +preemption (if enabled) of a task by higher priority tasks will +occur as required, overriding the other factors presented in the +description. + +@subsection Task Priority and Scheduling + +@cindex task priority + +The most significant of these mechanisms is the +ability for the user to assign a priority level to each +individual task when it is created and to alter a task's +priority at run-time. RTEMS provides 255 priority levels. +Level 255 is the lowest priority and level 1 is the highest. +When a task is added to the ready chain, it is placed behind all +other tasks of the same priority. This rule provides a +round-robin within priority group scheduling characteristic. +This means that in a group of equal priority tasks, tasks will +execute in the order they become ready or FIFO order. Even +though there are ways to manipulate and adjust task priorities, +the most important rule to remember is: + +@itemize @code{ } +@item @b{The RTEMS scheduler will always select the highest +priority task that is ready to run when allocating the processor +to a task.} +@end itemize + +@subsection Preemption + +@cindex preemption + +Another way the user can alter the basic scheduling +algorithm is by manipulating the preemption mode flag +(@code{@value{RPREFIX}PREEMPT_MASK}) of individual tasks. If preemption is disabled +for a task (@code{@value{RPREFIX}NO_PREEMPT}), then the task will not relinquish +control of the processor until it terminates, blocks, or +re-enables preemption. Even tasks which become ready to run and +possess higher priority levels will not be allowed to execute. +Note that the preemption setting has no effect on the manner in +which a task is scheduled. It only applies once a task has +control of the processor. + +@subsection Timeslicing + +@cindex timeslicing +@cindex round robin scheduling + +Timeslicing or round-robin scheduling is an +additional method which can be used to alter the basic +scheduling algorithm. Like preemption, timeslicing is specified +on a task by task basis using the timeslicing mode flag +(@code{@value{RPREFIX}TIMESLICE_MASK}). If timeslicing is enabled for a task +(@code{@value{RPREFIX}TIMESLICE}), then RTEMS will limit the amount of time the task +can execute before the processor is allocated to another task. +Each tick of the real-time clock reduces the currently running +task's timeslice. When the execution time equals the timeslice, +RTEMS will dispatch another task of the same priority to +execute. If there are no other tasks of the same priority ready +to execute, then the current task is allocated an additional +timeslice and continues to run. Remember that a higher priority +task will preempt the task (unless preemption is disabled) as +soon as it is ready to run, even if the task has not used up its +entire timeslice. + +@subsection Manual Round-Robin + +@cindex manual round robin + +The final mechanism for altering the RTEMS scheduling +algorithm is called manual round-robin. Manual round-robin is +invoked by using the @code{@value{DIRPREFIX}task_wake_after} +directive with a time interval of @code{@value{RPREFIX}YIELD_PROCESSOR}. +This allows a task to give up the +processor and be immediately returned to the ready chain at the +end of its priority group. If no other tasks of the same +priority are ready to run, then the task does not lose control +of the processor. + +@subsection Dispatching Tasks + +@cindex dispatching + +The dispatcher is the RTEMS component responsible for +allocating the processor to a ready task. In order to allocate +the processor to one task, it must be deallocated or retrieved +from the task currently using it. This involves a concept +called a context switch. To perform a context switch, the +dispatcher saves the context of the current task and restores +the context of the task which has been allocated to the +processor. Saving and restoring a task's context is the +storing/loading of all the essential information about a task to +enable it to continue execution without any effects of the +interruption. For example, the contents of a task's register +set must be the same when it is given the processor as they were +when it was taken away. All of the information that must be +saved or restored for a context switch is located either in the +TCB or on the task's stacks. + +Tasks that utilize a numeric coprocessor and are +created with the @code{@value{RPREFIX}FLOATING_POINT} attribute +require additional operations during a context switch. These +additional operations +are necessary to save and restore the floating point context of +@code{@value{RPREFIX}FLOATING_POINT} tasks. To avoid unnecessary save and restore +operations, the state of the numeric coprocessor is only saved +when a @code{@value{RPREFIX}FLOATING_POINT} task is dispatched and that task was not +the last task to utilize the coprocessor. + +@section Task State Transitions + +@cindex task state transitions + +Tasks in an RTEMS system must always be in one of the +five allowable task states. These states are: executing, ready, +blocked, dormant, and non-existent. + +A task occupies the non-existent state before a +@code{@value{DIRPREFIX}task_create} has been +issued on its behalf. A task enters the +non-existent state from any other state in the system when it is +deleted with the @code{@value{DIRPREFIX}task_delete} +directive. While a task occupies +this state it does not have a TCB or a task ID assigned to it; +therefore, no other tasks in the system may reference this task. + +When a task is created via the @code{@value{DIRPREFIX}task_create} directive +it enters the dormant state. This state is not entered through +any other means. Although the task exists in the system, it +cannot actively compete for system resources. It will remain in +the dormant state until it is started via the @code{@value{DIRPREFIX}task_start} +directive, at which time it enters the ready state. The task is +now permitted to be scheduled for the processor and to compete +for other system resources. + +@ifset use-ascii +@example +@group + +-------------------------------------------------------------+ + | Non-existent | + | +-------------------------------------------------------+ | + | | | | + | | | | + | | Creating +---------+ Deleting | | + | | -------------------> | Dormant | -------------------> | | + | | +---------+ | | + | | | | | + | | Starting | | | + | | | | | + | | V Deleting | | + | | +-------> +-------+ -------------------> | | + | | Yielding / +----- | Ready | ------+ | | + | | / / +-------+ <--+ \ | | + | | / / \ \ Blocking | | + | | / / Dispatching Readying \ \ | | + | | / V \ V | | + | | +-----------+ Blocking +---------+ | | + | | | Executing | --------------> | Blocked | | | + | | +-----------+ +---------+ | | + | | | | + | | | | + | +-------------------------------------------------------+ | + | Non-existent | + +-------------------------------------------------------------+ +@end group +@end example +@end ifset + +@ifset use-tex +@c @page +@example +@image{states,,3in} +@c @group +@c +-------------------------------------------------------------+ +@c | Non-existent | +@c | +-------------------------------------------------------+ | +@c | | | | +@c | | | | +@c | | Creating +---------+ Deleting | | +@c | | -------------------> | Dormant | -------------------> | | +@c | | +---------+ | | +@c | | | | | +@c | | Starting | | | +@c | | | | | +@c | | V Deleting | | +@c | | +-------> +-------+ -------------------> | | +@c | | Yielding / +----- | Ready | ------+ | | +@c | | / / +-------+ <--+ \ | | +@c | | / / \ \ Blocking | | +@c | | / / Dispatching Readying \ \ | | +@c | | / V \ V | | +@c | | +-----------+ Blocking +---------+ | | +@c | | | Executing | --------------> | Blocked | | | +@c | | +-----------+ +---------+ | | +@c | | | | +@c | | | | +@c | +-------------------------------------------------------+ | +@c | Non-existent | +@c +-------------------------------------------------------------+ +@c @end group +@end example +@end ifset + +@ifset use-html +@html +<IMG SRC="states.png" WIDTH=550 HEIGHT=400 ALT="RTEMS Task States"> +@end html +@end ifset + +A task occupies the blocked state whenever it is +unable to be scheduled to run. A running task may block itself +or be blocked by other tasks in the system. The running task +blocks itself through voluntary operations that cause the task +to wait. The only way a task can block a task other than itself +is with the @code{@value{DIRPREFIX}task_suspend} directive. +A task enters the blocked state due to any of the following conditions: + +@itemize @bullet +@item A task issues a @code{@value{DIRPREFIX}task_suspend} directive +which blocks either itself or another task in the system. + +@item The running task issues a @code{@value{DIRPREFIX}message_queue_receive} +directive with the wait option and the message queue is empty. + +@item The running task issues an @code{@value{DIRPREFIX}event_receive} +directive with the wait option and the currently pending events do not +satisfy the request. + +@item The running task issues a @code{@value{DIRPREFIX}semaphore_obtain} +directive with the wait option and the requested semaphore is unavailable. + +@item The running task issues a @code{@value{DIRPREFIX}task_wake_after} +directive which blocks the task for the given time interval. If the time +interval specified is zero, the task yields the processor and +remains in the ready state. + +@item The running task issues a @code{@value{DIRPREFIX}task_wake_when} +directive which blocks the task until the requested date and time arrives. + +@item The running task issues a @code{@value{DIRPREFIX}region_get_segment} +directive with the wait option and there is not an available segment large +enough to satisfy the task's request. + +@item The running task issues a @code{@value{DIRPREFIX}rate_monotonic_period} +directive and must wait for the specified rate monotonic period +to conclude. +@end itemize + +A blocked task may also be suspended. Therefore, +both the suspension and the blocking condition must be removed +before the task becomes ready to run again. + +A task occupies the ready state when it is able to be +scheduled to run, but currently does not have control of the +processor. Tasks of the same or higher priority will yield the +processor by either becoming blocked, completing their +timeslice, or being deleted. All tasks with the same priority +will execute in FIFO order. A task enters the ready state due +to any of the following conditions: + +@itemize @bullet + +@item A running task issues a @code{@value{DIRPREFIX}task_resume} +directive for a task that is suspended and the task is not blocked +waiting on any resource. + +@item A running task issues a @code{@value{DIRPREFIX}message_queue_send}, +@code{@value{DIRPREFIX}message_queue_broadcast}, or a +@code{@value{DIRPREFIX}message_queue_urgent} directive +which posts a message to the queue on which the blocked task is +waiting. + +@item A running task issues an @code{@value{DIRPREFIX}event_send} +directive which sends an event condition to a task which is blocked +waiting on that event condition. + +@item A running task issues a @code{@value{DIRPREFIX}semaphore_release} +directive which releases the semaphore on which the blocked task is +waiting. + +@item A timeout interval expires for a task which was blocked +by a call to the @code{@value{DIRPREFIX}task_wake_after} directive. + +@item A timeout period expires for a task which blocked by a +call to the @code{@value{DIRPREFIX}task_wake_when} directive. + +@item A running task issues a @code{@value{DIRPREFIX}region_return_segment} +directive which releases a segment to the region on which the blocked task +is waiting and a resulting segment is large enough to satisfy +the task's request. + +@item A rate monotonic period expires for a task which blocked +by a call to the @code{@value{DIRPREFIX}rate_monotonic_period} directive. + +@item A timeout interval expires for a task which was blocked +waiting on a message, event, semaphore, or segment with a +timeout specified. + +@item A running task issues a directive which deletes a +message queue, a semaphore, or a region on which the blocked +task is waiting. + +@item A running task issues a @code{@value{DIRPREFIX}task_restart} +directive for the blocked task. + +@item The running task, with its preemption mode enabled, may +be made ready by issuing any of the directives that may unblock +a task with a higher priority. This directive may be issued +from the running task itself or from an ISR. + +A ready task occupies the executing state when it has +control of the CPU. A task enters the executing state due to +any of the following conditions: + +@item The task is the highest priority ready task in the +system. + +@item The running task blocks and the task is next in the +scheduling queue. The task may be of equal priority as in +round-robin scheduling or the task may possess the highest +priority of the remaining ready tasks. + +@item The running task may reenable its preemption mode and a +task exists in the ready queue that has a higher priority than +the running task. + +@item The running task lowers its own priority and another +task is of higher priority as a result. + +@item The running task raises the priority of a task above its +own and the running task is in preemption mode. + +@end itemize diff --git a/doc/user/sem.t b/doc/user/sem.t new file mode 100644 index 0000000000..dd51266892 --- /dev/null +++ b/doc/user/sem.t @@ -0,0 +1,832 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Semaphore Manager + +@cindex semaphores +@cindex binary semaphores +@cindex counting semaphores +@cindex mutual exclusion + +@section Introduction + +The semaphore manager utilizes standard Dijkstra +counting semaphores to provide synchronization and mutual +exclusion capabilities. The directives provided by the +semaphore manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}semaphore_create} - Create a semaphore +@item @code{@value{DIRPREFIX}semaphore_ident} - Get ID of a semaphore +@item @code{@value{DIRPREFIX}semaphore_delete} - Delete a semaphore +@item @code{@value{DIRPREFIX}semaphore_obtain} - Acquire a semaphore +@item @code{@value{DIRPREFIX}semaphore_release} - Release a semaphore +@item @code{@value{DIRPREFIX}semaphore_flush} - Unblock all tasks waiting on a semaphore +@end itemize + +@section Background + +A semaphore can be viewed as a protected variable +whose value can be modified only with the +@code{@value{DIRPREFIX}semaphore_create}, +@code{@value{DIRPREFIX}semaphore_obtain}, and +@code{@value{DIRPREFIX}semaphore_release} directives. RTEMS +supports both binary and counting semaphores. A binary semaphore +is restricted to values of zero or one, while a counting +semaphore can assume any non-negative integer value. + +A binary semaphore can be used to control access to a +single resource. In particular, it can be used to enforce +mutual exclusion for a critical section in user code. In this +instance, the semaphore would be created with an initial count +of one to indicate that no task is executing the critical +section of code. Upon entry to the critical section, a task +must issue the @code{@value{DIRPREFIX}semaphore_obtain} +directive to prevent other tasks from entering the critical section. +Upon exit from the critical section, the task must issue the +@code{@value{DIRPREFIX}semaphore_release} directive to +allow another task to execute the critical section. + +A counting semaphore can be used to control access to +a pool of two or more resources. For example, access to three +printers could be administered by a semaphore created with an +initial count of three. When a task requires access to one of +the printers, it issues the @code{@value{DIRPREFIX}semaphore_obtain} +directive to obtain access to a printer. If a printer is not currently +available, the task can wait for a printer to become available or return +immediately. When the task has completed printing, it should +issue the @code{@value{DIRPREFIX}semaphore_release} +directive to allow other tasks access to the printer. + +Task synchronization may be achieved by creating a +semaphore with an initial count of zero. One task waits for the +arrival of another task by issuing a @code{@value{DIRPREFIX}semaphore_obtain} +directive when it reaches a synchronization point. The other task +performs a corresponding @code{@value{DIRPREFIX}semaphore_release} +operation when it reaches its synchronization point, thus unblocking +the pending task. + +@subsection Nested Resource Access + +Deadlock occurs when a task owning a binary semaphore +attempts to acquire that same semaphore and blocks as result. +Since the semaphore is allocated to a task, it cannot be +deleted. Therefore, the task that currently holds the semaphore +and is also blocked waiting for that semaphore will never +execute again. + +RTEMS addresses this problem by allowing the task +holding the binary semaphore to obtain the same binary semaphore +multiple times in a nested manner. Each +@code{@value{DIRPREFIX}semaphore_obtain} must be accompanied with a +@code{@value{DIRPREFIX}semaphore_release}. The semaphore will +only be made available for acquisition by other tasks when the +outermost @code{@value{DIRPREFIX}semaphore_obtain} is matched with +a @code{@value{DIRPREFIX}semaphore_release}. + +Simple binary semaphores do not allow nested access and so can be used for task synchronization. + + +@subsection Priority Inversion + +Priority inversion is a form of indefinite +postponement which is common in multitasking, preemptive +executives with shared resources. Priority inversion occurs +when a high priority tasks requests access to shared resource +which is currently allocated to low priority task. The high +priority task must block until the low priority task releases +the resource. This problem is exacerbated when the low priority +task is prevented from executing by one or more medium priority +tasks. Because the low priority task is not executing, it +cannot complete its interaction with the resource and release +that resource. The high priority task is effectively prevented +from executing by lower priority tasks. + +@subsection Priority Inheritance + +Priority inheritance is an algorithm that calls for +the lower priority task holding a resource to have its priority +increased to that of the highest priority task blocked waiting +for that resource. Each time a task blocks attempting to obtain +the resource, the task holding the resource may have its +priority increased. + +RTEMS supports priority inheritance for local, binary +semaphores that use the priority task wait queue blocking +discipline. When a task of higher priority than the task +holding the semaphore blocks, the priority of the task holding +the semaphore is increased to that of the blocking task. When +the task holding the task completely releases the binary +semaphore (i.e. not for a nested release), the holder's priority +is restored to the value it had before any higher priority was +inherited. + +The RTEMS implementation of the priority inheritance +algorithm takes into account the scenario in which a task holds +more than one binary semaphore. The holding task will execute +at the priority of the higher of the highest ceiling priority or +at the priority of the highest priority task blocked waiting for +any of the semaphores the task holds. Only when the task +releases ALL of the binary semaphores it holds will its priority +be restored to the normal value. + +@subsection Priority Ceiling + +Priority ceiling is an algorithm that calls for the +lower priority task holding a resource to have its priority +increased to that of the highest priority task which will EVER +block waiting for that resource. This algorithm addresses the +problem of priority inversion although it avoids the possibility +of changing the priority of the task holding the resource +multiple times. The priority ceiling algorithm will only change +the priority of the task holding the resource a maximum of one +time. The ceiling priority is set at creation time and must be +the priority of the highest priority task which will ever +attempt to acquire that semaphore. + +RTEMS supports priority ceiling for local, binary +semaphores that use the priority task wait queue blocking +discipline. When a task of lower priority than the ceiling +priority successfully obtains the semaphore, its priority is +raised to the ceiling priority. When the task holding the task +completely releases the binary semaphore (i.e. not for a nested +release), the holder's priority is restored to the value it had +before any higher priority was put into effect. + +The need to identify the highest priority task which +will attempt to obtain a particular semaphore can be a difficult +task in a large, complicated system. Although the priority +ceiling algorithm is more efficient than the priority +inheritance algorithm with respect to the maximum number of task +priority changes which may occur while a task holds a particular +semaphore, the priority inheritance algorithm is more forgiving +in that it does not require this apriori information. + +The RTEMS implementation of the priority ceiling +algorithm takes into account the scenario in which a task holds +more than one binary semaphore. The holding task will execute +at the priority of the higher of the highest ceiling priority or +at the priority of the highest priority task blocked waiting for +any of the semaphores the task holds. Only when the task +releases ALL of the binary semaphores it holds will its priority +be restored to the normal value. + +@subsection Building a Semaphore Attribute Set + +In general, an attribute set is built by a bitwise OR +of the desired attribute components. The following table lists +the set of valid semaphore attributes: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) + +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority + +@item @code{@value{RPREFIX}BINARY_SEMAPHORE} - restrict values to +0 and 1 + +@item @code{@value{RPREFIX}COUNTING_SEMAPHORE} - no restriction on values +(default) + +@item @code{@value{RPREFIX}SIMPLE_BINARY_SEMAPHORE} - restrict values to +0 and 1, do not allow nested access, allow deletion of locked semaphore. + +@item @code{@value{RPREFIX}NO_INHERIT_PRIORITY} - do not use priority +inheritance (default) + +@item @code{@value{RPREFIX}INHERIT_PRIORITY} - use priority inheritance + +@item @code{@value{RPREFIX}PRIORITY_CEILING} - use priority ceiling + +@item @code{@value{RPREFIX}NO_PRIORITY_CEILING} - do not use priority +ceiling (default) + +@item @code{@value{RPREFIX}LOCAL} - local task (default) + +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +Attribute values are specifically designed to be +mutually exclusive, therefore bitwise OR and addition operations +are equivalent as long as each attribute appears exactly once in +the component list. An attribute listed as a default is not +required to appear in the attribute list, although it is a good +programming practice to specify default attributes. If all +defaults are desired, the attribute +@code{@value{RPREFIX}DEFAULT_ATTRIBUTES} should be +specified on this call. + +This example demonstrates the attribute_set parameter needed to create a +local semaphore with the task priority waiting queue discipline. The +attribute_set parameter passed to the +@code{@value{DIRPREFIX}semaphore_create} directive could be either +@code{@value{RPREFIX}PRIORITY} or @code{@value{RPREFIX}LOCAL @value{OR} +@value{RPREFIX}PRIORITY}. The attribute_set parameter can be set to +@code{@value{RPREFIX}PRIORITY} because @code{@value{RPREFIX}LOCAL} is the +default for all created tasks. If a similar semaphore were to be known +globally, then the attribute_set parameter would be +@code{@value{RPREFIX}GLOBAL @value{OR} @value{RPREFIX}PRIORITY}. + +@subsection Building a SEMAPHORE_OBTAIN Option Set + +In general, an option is built by a bitwise OR of the +desired option components. The set of valid options for the +@code{@value{DIRPREFIX}semaphore_obtain} directive are listed +in the following table: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for semaphore (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +Option values are specifically designed to be mutually exclusive, +therefore bitwise OR and addition operations are equivalent as long as +each attribute appears exactly once in the component list. An option +listed as a default is not required to appear in the list, although it is +a good programming practice to specify default options. If all defaults +are desired, the option @code{@value{RPREFIX}DEFAULT_OPTIONS} should be +specified on this call. + +This example demonstrates the option parameter needed +to poll for a semaphore. The option parameter passed to the +@code{@value{DIRPREFIX}semaphore_obtain} +directive should be @code{@value{RPREFIX}NO_WAIT}. + +@section Operations + +@subsection Creating a Semaphore + +The @code{@value{DIRPREFIX}semaphore_create} directive creates a binary or +counting semaphore with a user-specified name as well as an +initial count. If a binary semaphore is created with a count of +zero (0) to indicate that it has been allocated, then the task +creating the semaphore is considered the current holder of the +semaphore. At create time the method for ordering waiting tasks +in the semaphore's task wait queue (by FIFO or task priority) is +specified. Additionally, the priority inheritance or priority +ceiling algorithm may be selected for local, binary semaphores +that use the priority task wait queue blocking discipline. If +the priority ceiling algorithm is selected, then the highest +priority of any task which will attempt to obtain this semaphore +must be specified. RTEMS allocates a Semaphore Control Block +(SMCB) from the SMCB free list. This data structure is used by +RTEMS to manage the newly created semaphore. Also, a unique +semaphore ID is generated and returned to the calling task. + +@subsection Obtaining Semaphore IDs + +When a semaphore is created, RTEMS generates a unique +semaphore ID and assigns it to the created semaphore until it is +deleted. The semaphore ID may be obtained by either of two +methods. First, as the result of an invocation of the +@code{@value{DIRPREFIX}semaphore_create} directive, the +semaphore ID is stored in a user provided location. Second, +the semaphore ID may be obtained later using the +@code{@value{DIRPREFIX}semaphore_ident} directive. The semaphore ID is +used by other semaphore manager directives to access this +semaphore. + +@subsection Acquiring a Semaphore + +The @code{@value{DIRPREFIX}semaphore_obtain} directive is used to acquire the +specified semaphore. A simplified version of the +@code{@value{DIRPREFIX}semaphore_obtain} directive can be described as follows: + +@example +if semaphore's count is greater than zero + then decrement semaphore's count + else wait for release of semaphore + +return SUCCESSFUL +@end example + +When the semaphore cannot be immediately acquired, +one of the following situations applies: + +@itemize @bullet +@item By default, the calling task will wait forever to +acquire the semaphore. + +@item Specifying @code{@value{RPREFIX}NO_WAIT} forces an immediate return +with an error status code. + +@item Specifying a timeout limits the interval the task will +wait before returning with an error status code. +@end itemize + +If the task waits to acquire the semaphore, then it +is placed in the semaphore's task wait queue in either FIFO or +task priority order. If the task blocked waiting for a binary +semaphore using priority inheritance and the task's priority is +greater than that of the task currently holding the semaphore, +then the holding task will inherit the priority of the blocking +task. All tasks waiting on a semaphore are returned an error +code when the semaphore is deleted. + +When a task successfully obtains a semaphore using +priority ceiling and the priority ceiling for this semaphore is +greater than that of the holder, then the holder's priority will +be elevated. + +@subsection Releasing a Semaphore + +The @code{@value{DIRPREFIX}semaphore_release} directive is used to release +the specified semaphore. A simplified version of the +@code{@value{DIRPREFIX}semaphore_release} directive can be described as +follows: + +@example +if no tasks are waiting on this semaphore + then increment semaphore's count + else assign semaphore to a waiting task + +return SUCCESSFUL +@end example + +If this is the outermost release of a binary +semaphore that uses priority inheritance or priority ceiling and +the task does not currently hold any other binary semaphores, +then the task performing the @code{@value{DIRPREFIX}semaphore_release} +will have its priority restored to its normal value. + +@subsection Deleting a Semaphore + +The @code{@value{DIRPREFIX}semaphore_delete} directive removes a semaphore +from the system and frees its control block. A semaphore can be +deleted by any local task that knows the semaphore's ID. As a +result of this directive, all tasks blocked waiting to acquire +the semaphore will be readied and returned a status code which +indicates that the semaphore was deleted. Any subsequent +references to the semaphore's name and ID are invalid. + +@section Directives + +This section details the semaphore manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection SEMAPHORE_CREATE - Create a semaphore + +@cindex create a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_create +@example +rtems_status_code rtems_semaphore_create( + rtems_name name, + rtems_unsigned32 count, + rtems_attribute attribute_set, + rtems_task_priority priority_ceiling, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Create ( + Name : in RTEMS.Name; + Count : in RTEMS.Unsigned32; + Attribute_Set : in RTEMS.Attribute; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}TOO_MANY} - too many semaphores created@* +@code{@value{RPREFIX}NOT_DEFINED} - invalid attribute set@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid starting count for binary semaphore@* +@code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured@* +@code{@value{RPREFIX}TOO_MANY} - too many global objects + +@subheading DESCRIPTION: + +This directive creates a semaphore which resides on +the local node. The created semaphore has the user-defined name +specified in name and the initial count specified in count. For +control and maintenance of the semaphore, RTEMS allocates and +initializes a SMCB. The RTEMS-assigned semaphore id is returned +in id. This semaphore id is used with other semaphore related +directives to access the semaphore. + +Specifying PRIORITY in attribute_set causes tasks +waiting for a semaphore to be serviced according to task +priority. When FIFO is selected, tasks are serviced in First +In-First Out order. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The priority inheritance and priority ceiling +algorithms are only supported for local, binary semaphores that +use the priority task wait queue blocking discipline. + +The following semaphore attribute constants are +defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}FIFO} - tasks wait by FIFO (default) + +@item @code{@value{RPREFIX}PRIORITY} - tasks wait by priority + +@item @code{@value{RPREFIX}BINARY_SEMAPHORE} - restrict values to +0 and 1 + +@item @code{@value{RPREFIX}COUNTING_SEMAPHORE} - no restriction on values +(default) + +@item @code{@value{RPREFIX}SIMPLE_BINARY_SEMAPHORE} - restrict values to +0 and 1, block on nested access, allow deletion of locked semaphore. + +@item @code{@value{RPREFIX}NO_INHERIT_PRIORITY} - do not use priority +inheritance (default) + +@item @code{@value{RPREFIX}INHERIT_PRIORITY} - use priority inheritance + +@item @code{@value{RPREFIX}PRIORITY_CEILING} - use priority ceiling + +@item @code{@value{RPREFIX}NO_PRIORITY_CEILING} - do not use priority +ceiling (default) + +@item @code{@value{RPREFIX}LOCAL} - local task (default) + +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +Semaphores should not be made global unless remote +tasks must interact with the created semaphore. This is to +avoid the system overhead incurred by the creation of a global +semaphore. When a global semaphore is created, the semaphore's +name and id must be transmitted to every node in the system for +insertion in the local copy of the global object table. + +The total number of global objects, including +semaphores, is limited by the maximum_global_objects field in +the Configuration Table. + +@c +@c +@c +@page +@subsection SEMAPHORE_IDENT - Get ID of a semaphore + +@cindex get ID of a semaphore +@cindex obtain ID of a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_ident +@example +rtems_status_code rtems_semaphore_ident( + rtems_name name, + rtems_unsigned32 node, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Ident ( + Name : in RTEMS.Name; + Node : in RTEMS.Unsigned32; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore identified successfully@* +@code{@value{RPREFIX}INVALID_NAME} - semaphore name not found@* +@code{@value{RPREFIX}INVALID_NODE} - invalid node id + +@subheading DESCRIPTION: + +This directive obtains the semaphore id associated +with the semaphore name. If the semaphore name is not unique, +then the semaphore id will match one of the semaphores with that +name. However, this semaphore id is not guaranteed to +correspond to the desired semaphore. The semaphore id is used +by other semaphore related directives to access the semaphore. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +If node is @code{@value{RPREFIX}SEARCH_ALL_NODES}, all nodes are searched +with the local node being searched first. All other nodes are +searched with the lowest numbered node searched first. + +If node is a valid node number which does not +represent the local node, then only the semaphores exported by +the designated node are searched. + +This directive does not generate activity on remote +nodes. It accesses only the local copy of the global object +table. + +@c +@c +@c +@page +@subsection SEMAPHORE_DELETE - Delete a semaphore + +@cindex delete a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_delete +@example +rtems_status_code rtems_semaphore_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid semaphore id@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot delete remote semaphore@* +@code{@value{RPREFIX}RESOURCE_IN_USE} - binary semaphore is in use + +@subheading DESCRIPTION: + +This directive deletes the semaphore specified by @code{id}. +All tasks blocked waiting to acquire the semaphore will be +readied and returned a status code which indicates that the +semaphore was deleted. The SMCB for this semaphore is reclaimed +by RTEMS. + +@subheading NOTES: + +The calling task will be preempted if it is enabled +by the task's execution mode and a higher priority local task is +waiting on the deleted semaphore. The calling task will NOT be +preempted if all of the tasks that are waiting on the semaphore +are remote tasks. + +The calling task does not have to be the task that +created the semaphore. Any local task that knows the semaphore +id can delete the semaphore. + +When a global semaphore is deleted, the semaphore id +must be transmitted to every node in the system for deletion +from the local copy of the global object table. + +The semaphore must reside on the local node, even if +the semaphore was created with the @code{@value{RPREFIX}GLOBAL} option. + +Proxies, used to represent remote tasks, are +reclaimed when the semaphore is deleted. + +@c +@c +@c +@page +@subsection SEMAPHORE_OBTAIN - Acquire a semaphore + +@cindex obtain a semaphore +@cindex lock a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_obtain +@example +rtems_status_code rtems_semaphore_obtain( + rtems_id id, + rtems_unsigned32 option_set, + rtems_interval timeout +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Obtain ( + ID : in RTEMS.ID; + Option_Set : in RTEMS.Option; + Timeout : in RTEMS.Interval; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore obtained successfully@* +@code{@value{RPREFIX}UNSATISFIED} - semaphore not available@* +@code{@value{RPREFIX}TIMEOUT} - timed out waiting for semaphore@* +@code{@value{RPREFIX}OBJECT_WAS_DELETED} - semaphore deleted while waiting@* +@code{@value{RPREFIX}INVALID_ID} - invalid semaphore id + +@subheading DESCRIPTION: + +This directive acquires the semaphore specified by +id. The @code{@value{RPREFIX}WAIT} and @code{@value{RPREFIX}NO_WAIT} components of the options parameter +indicate whether the calling task wants to wait for the +semaphore to become available or return immediately if the +semaphore is not currently available. With either @code{@value{RPREFIX}WAIT} or +@code{@value{RPREFIX}NO_WAIT}, if the current semaphore count is positive, then it is +decremented by one and the semaphore is successfully acquired by +returning immediately with a successful return code. + +If the calling task chooses to return immediately and the current +semaphore count is zero or negative, then a status code is returned +indicating that the semaphore is not available. If the calling task +chooses to wait for a semaphore and the current semaphore count is zero or +negative, then it is decremented by one and the calling task is placed on +the semaphore's wait queue and blocked. If the semaphore was created with +the @code{@value{RPREFIX}PRIORITY} attribute, then the calling task is +inserted into the queue according to its priority. However, if the +semaphore was created with the @code{@value{RPREFIX}FIFO} attribute, then +the calling task is placed at the rear of the wait queue. If the binary +semaphore was created with the @code{@value{RPREFIX}INHERIT_PRIORITY} +attribute, then the priority of the task currently holding the binary +semaphore is guaranteed to be greater than or equal to that of the +blocking task. If the binary semaphore was created with the +@code{@value{RPREFIX}PRIORITY_CEILING} attribute, a task successfully +obtains the semaphore, and the priority of that task is greater than the +ceiling priority for this semaphore, then the priority of the task +obtaining the semaphore is elevated to that of the ceiling. + +The timeout parameter specifies the maximum interval the calling task is +willing to be blocked waiting for the semaphore. If it is set to +@code{@value{RPREFIX}NO_TIMEOUT}, then the calling task will wait forever. +If the semaphore is available or the @code{@value{RPREFIX}NO_WAIT} option +component is set, then timeout is ignored. + +@subheading NOTES: +The following semaphore acquisition option constants +are defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}WAIT} - task will wait for semaphore (default) +@item @code{@value{RPREFIX}NO_WAIT} - task should not wait +@end itemize + +Attempting to obtain a global semaphore which does not reside on the local +node will generate a request to the remote node to access the semaphore. +If the semaphore is not available and @code{@value{RPREFIX}NO_WAIT} was +not specified, then the task must be blocked until the semaphore is +released. A proxy is allocated on the remote node to represent the task +until the semaphore is released. + +A clock tick is required to support the timeout functionality of +this directive. + +@c +@c +@c +@page +@subsection SEMAPHORE_RELEASE - Release a semaphore + +@cindex release a semaphore +@cindex unlock a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_release +@example +rtems_status_code rtems_semaphore_release( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Release ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore released successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid semaphore id@* +@code{@value{RPREFIX}NOT_OWNER_OF_RESOURCE} - calling task does not own semaphore + +@subheading DESCRIPTION: + +This directive releases the semaphore specified by +id. The semaphore count is incremented by one. If the count is +zero or negative, then the first task on this semaphore's wait +queue is removed and unblocked. The unblocked task may preempt +the running task if the running task's preemption mode is +enabled and the unblocked task has a higher priority than the +running task. + +@subheading NOTES: + +The calling task may be preempted if it causes a +higher priority task to be made ready for execution. + +Releasing a global semaphore which does not reside on +the local node will generate a request telling the remote node +to release the semaphore. + +If the task to be unblocked resides on a different +node from the semaphore, then the semaphore allocation is +forwarded to the appropriate node, the waiting task is +unblocked, and the proxy used to represent the task is reclaimed. + +The outermost release of a local, binary, priority +inheritance or priority ceiling semaphore may result in the +calling task having its priority lowered. This will occur if +the calling task holds no other binary semaphores and it has +inherited a higher priority. + +@c +@c +@c +@page +@subsection SEMAPHORE_FLUSH - Unblock all tasks waiting on a semaphore + +@cindex flush a semaphore +@cindex unblock all tasks waiting on a semaphore + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_semaphore_flush +@example +rtems_status_code rtems_semaphore_flush( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Semaphore_Flush ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - semaphore released successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid semaphore id@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - not supported for remote semaphores + +@subheading DESCRIPTION: + +This directive unblocks all tasks waiting on the semaphore specified by +id. Since there are tasks blocked on the semaphore, the semaphore's +count is not changed by this directive and thus is zero before and +after this directive is executed. Tasks which are unblocked as the +result of this directive will return from the +@code{@value{DIRPREFIX}semaphore_release} directive with a +status code of @code{@value{RPREFIX}UNSATISFIED} to indicate +that the semaphore was not obtained. + +This directive may unblock any number of tasks. Any of the unblocked +tasks may preempt the running task if the running task's preemption mode is +enabled and an unblocked task has a higher priority than the +running task. + +@subheading NOTES: + +The calling task may be preempted if it causes a +higher priority task to be made ready for execution. + +If the task to be unblocked resides on a different +node from the semaphore, then the waiting task is +unblocked, and the proxy used to represent the task is reclaimed. + + diff --git a/doc/user/signal.t b/doc/user/signal.t new file mode 100644 index 0000000000..c441338d2a --- /dev/null +++ b/doc/user/signal.t @@ -0,0 +1,389 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Signal Manager + +@cindex signals + +@section Introduction + +The signal manager provides the capabilities required +for asynchronous communication. The directives provided by the +signal manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}signal_catch} - Establish an ASR +@item @code{@value{DIRPREFIX}signal_send} - Send signal set to a task +@end itemize + +@section Background + +@subsection Signal Manager Definitions + +@cindex asynchronous signal routine +@cindex ASR + +The signal manager allows a task to optionally define +an asynchronous signal routine (ASR). An ASR is to a task what +an ISR is to an application's set of tasks. When the processor +is interrupted, the execution of an application is also +interrupted and an ISR is given control. Similarly, when a +signal is sent to a task, that task's execution path will be +"interrupted" by the ASR. Sending a signal to a task has no +effect on the receiving task's current execution state. + +@findex rtems_signal_set + +A signal flag is used by a task (or ISR) to inform +another task of the occurrence of a significant situation. +Thirty-two signal flags are associated with each task. A +collection of one or more signals is referred to as a signal +set. The data type @code{@value{DIRPREFIX}signal_set} +is used to manipulate signal sets. + +A signal set is posted when it is directed (or sent) to a +task. A pending signal is a signal that has been sent to a task +with a valid ASR, but has not been processed by that task's ASR. + + +@subsection A Comparison of ASRs and ISRs + +@cindex ASR vs. ISR +@cindex ISR vs. ASR + +The format of an ASR is similar to that of an ISR +with the following exceptions: + +@itemize @bullet +@item ISRs are scheduled by the processor hardware. ASRs are +scheduled by RTEMS. + +@item ISRs do not execute in the context of a task and may +invoke only a subset of directives. ASRs execute in the context +of a task and may execute any directive. + +@item When an ISR is invoked, it is passed the vector number +as its argument. When an ASR is invoked, it is passed the +signal set as its argument. + +@item An ASR has a task mode which can be different from that +of the task. An ISR does not execute as a task and, as a +result, does not have a task mode. +@end itemize + +@subsection Building a Signal Set + +@cindex signal set, building + +A signal set is built by a bitwise OR of the desired +signals. The set of valid signals is @code{@value{RPREFIX}SIGNAL_0} through +@code{@value{RPREFIX}SIGNAL_31}. If a signal is not explicitly specified in the +signal set, then it is not present. Signal values are +specifically designed to be mutually exclusive, therefore +bitwise OR and addition operations are equivalent as long as +each signal appears exactly once in the component list. + +This example demonstrates the signal parameter used +when sending the signal set consisting of +@code{@value{RPREFIX}SIGNAL_6}, +@code{@value{RPREFIX}SIGNAL_15}, and +@code{@value{RPREFIX}SIGNAL_31}. The signal parameter provided +to the @code{@value{DIRPREFIX}signal_send} directive should be +@code{@value{RPREFIX}SIGNAL_6 @value{OR} +@value{RPREFIX}SIGNAL_15 @value{OR} @value{RPREFIX}SIGNAL_31}. + +@subsection Building an ASR Mode + +@cindex ASR mode, building + +In general, an ASR's mode is built by a bitwise OR of +the desired mode components. The set of valid mode components +is the same as those allowed with the task_create and task_mode +directives. A complete list of mode options is provided in the +following table: + +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n +@end itemize + +Mode values are specifically designed to be mutually +exclusive, therefore bitwise OR and addition operations are +equivalent as long as each mode appears exactly once in the +component list. A mode component listed as a default is not +required to appear in the mode list, although it is a good +programming practice to specify default components. If all +defaults are desired, the mode DEFAULT_MODES should be specified +on this call. + +This example demonstrates the mode parameter used +with the @code{@value{DIRPREFIX}signal_catch} +to establish an ASR which executes at +interrupt level three and is non-preemptible. The mode should +be set to +@code{@value{RPREFIX}INTERRUPT_LEVEL(3) @value{OR} @value{RPREFIX}NO_PREEMPT} +to indicate the +desired processor mode and interrupt level. + +@section Operations + +@subsection Establishing an ASR + +The @code{@value{DIRPREFIX}signal_catch} directive establishes an ASR for the +calling task. The address of the ASR and its execution mode are +specified to this directive. The ASR's mode is distinct from +the task's mode. For example, the task may allow preemption, +while that task's ASR may have preemption disabled. Until a +task calls @code{@value{DIRPREFIX}signal_catch} the first time, +its ASR is invalid, and no signal sets can be sent to the task. + +A task may invalidate its ASR and discard all pending +signals by calling @code{@value{DIRPREFIX}signal_catch} +with a value of NULL for the ASR's address. When a task's +ASR is invalid, new signal sets sent to this task are discarded. + +A task may disable ASR processing (@code{@value{RPREFIX}NO_ASR}) via the +task_mode directive. When a task's ASR is disabled, the signals +sent to it are left pending to be processed later when the ASR +is enabled. + +Any directive that can be called from a task can also +be called from an ASR. A task is only allowed one active ASR. +Thus, each call to @code{@value{DIRPREFIX}signal_catch} +replaces the previous one. + +Normally, signal processing is disabled for the ASR's +execution mode, but if signal processing is enabled for the ASR, +the ASR must be reentrant. + +@subsection Sending a Signal Set + +The @code{@value{DIRPREFIX}signal_send} directive allows both +tasks and ISRs to send signals to a target task. The target task and +a set of signals are specified to the +@code{@value{DIRPREFIX}signal_send} directive. The sending +of a signal to a task has no effect on the execution state of +that task. If the task is not the currently running task, then +the signals are left pending and processed by the task's ASR the +next time the task is dispatched to run. The ASR is executed +immediately before the task is dispatched. If the currently +running task sends a signal to itself or is sent a signal from +an ISR, its ASR is immediately dispatched to run provided signal +processing is enabled. + +If an ASR with signals enabled is preempted by +another task or an ISR and a new signal set is sent, then a new +copy of the ASR will be invoked, nesting the preempted ASR. +Upon completion of processing the new signal set, control will +return to the preempted ASR. In this situation, the ASR must be +reentrant. + +Like events, identical signals sent to a task are not +queued. In other words, sending the same signal multiple times +to a task (without any intermediate signal processing occurring +for the task), has the same result as sending that signal to +that task once. + +@subsection Processing an ASR + +Asynchronous signals were designed to provide the +capability to generate software interrupts. The processing of +software interrupts parallels that of hardware interrupts. As a +result, the differences between the formats of ASRs and ISRs is +limited to the meaning of the single argument passed to an ASR. +The ASR should have the following calling sequence and adhere to +@value{LANGUAGE} calling conventions: + +@ifset is-C +@findex rtems_asr +@example +rtems_asr user_routine( + rtems_signal_set signals +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Routine ( + Signals : in RTEMS.Signal_Set +); +@end example +@end ifset + +When the ASR returns to RTEMS the mode and execution +path of the interrupted task (or ASR) is restored to the context +prior to entering the ASR. + +@section Directives + +This section details the signal manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection SIGNAL_CATCH - Establish an ASR + +@cindex establish an ASR +@cindex install an ASR + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_signal_catch +@example +rtems_status_code rtems_signal_catch( + rtems_asr_entry asr_handler, + rtems_mode mode +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Signal_Catch ( + ASR_Handler : in RTEMS.ASR_Handler; + Mode_Set : in RTEMS.Mode; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - always successful + +@subheading DESCRIPTION: + +This directive establishes an asynchronous signal +routine (ASR) for the calling task. The asr_handler parameter +specifies the entry point of the ASR. If asr_handler is NULL, +the ASR for the calling task is invalidated and all pending +signals are cleared. Any signals sent to a task with an invalid +ASR are discarded. The mode parameter specifies the execution +mode for the ASR. This execution mode supersedes the task's +execution mode while the ASR is executing. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +The following task mode constants are defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n +@end itemize + +@c +@c +@c +@page +@subsection SIGNAL_SEND - Send signal set to a task + +@cindex send signal set + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_signal_send +@example +rtems_status_code rtems_signal_send( + rtems_id id, + rtems_signal_set signal_set +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Signal_Send ( + ID : in RTEMS.ID; + Signal_Set : in RTEMS.Signal_Set; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - signal sent successfully@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}NOT_DEFINED} - ASR invalid + +@subheading DESCRIPTION: + +This directive sends a signal set to the task +specified in id. The signal_set parameter contains the signal +set to be sent to the task. + +If a caller sends a signal set to a task with an +invalid ASR, then an error code is returned to the caller. If a +caller sends a signal set to a task whose ASR is valid but +disabled, then the signal set will be caught and left pending +for the ASR to process when it is enabled. If a caller sends a +signal set to a task with an ASR that is both valid and enabled, +then the signal set is caught and the ASR will execute the next +time the task is dispatched to run. + +@subheading NOTES: + +Sending a signal set to a task has no effect on that +task's state. If a signal set is sent to a blocked task, then +the task will remain blocked and the signals will be processed +when the task becomes the running task. + +Sending a signal set to a global task which does not +reside on the local node will generate a request telling the +remote node to send the signal set to the specified task. + diff --git a/doc/user/states.eps b/doc/user/states.eps new file mode 100644 index 0000000000..cea4e7f344 --- /dev/null +++ b/doc/user/states.eps @@ -0,0 +1,13822 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (states.eps) +%%CreationDate: (Wed Oct 6 11:08:51 1999) +%%BoundingBox: 0 109 495 573 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 109 495 573 +userdict begin +%%BeginData: +DisplayImage +0 109 +495.101124 464.359551 +12 +721 676 +1 +1 +1 +8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff87ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff8787ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff8787ffffffff6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6effff8787ffffffff876e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6effffff8787ffffffff8787a07762636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636363 +636363636363636363636363636363636363636363636363636363636363636363636362 +75ffffffff8787ffffffff87877731111a19191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +191919191919191919191919191919191919191919191919191919191919191919191919 +19191919191919191919191919191919191919191919191919191919191919191919191a +123affffffff8787ffffffff878763140000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00001effffffff8787ffffffff8787631900000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000001effffffff8787ffffffff87876319000000050000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000003 +000000001effffffff8787ffffffff87876319000005ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff820000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff810000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7a747effffffffffffffffffbe687affffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7a68beff +fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffd000000b3ffffffffffffffff730000fdffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb000070 +ffffffffffffffffffffffffffffffffffffff5e82ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5e82ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00000000f8ffffffffffffff7f0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0400 +7effffffffffffffffffffffffffffffffffff3c0077ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff3c0077ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000080ffffffffffffff7f0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd +fdffffffffffffffffffffffffffffffffffffff00007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000080000c3ffffffffffff7f0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000081ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000081ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00007a230037ffffffffffff7f0000ffff +fffffffffffff5827872bcfffffffffffffffff8f9ffffb9727881f6ffffffffffffffff +ffffffffffffffffffffffbd727b72baffffffffffffeefbfcfffffffffffffffffbf3f8 +fff7f8fffffffffffff481787882f4fffffffffffefa050080fff7ffffffffffffbd727b +72bafffffffffffffff8f8fffff4827872bafffffffffffefa050080fff7ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00009b9d00007affffffffff7f0000ff +ffffffffffc23100000000000176ffffffffff7c000cff44000000000077ffffffffffff +ffffffffffffffffffffb100000000000034c2ffffffff460000b1ffffffffffff3b0000 +c2ff00007cffffffffb20000000000003efffffffa00000000000000faffffffb1000000 +00000034c2fffffffffa000096cb000000000030cafffffa00000000000000faffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000089ff3c0003feffffffff7f0000 +ffffffffffb30000000003000000003effffffff7d00043b00000003000000bfffffffff +ffffffffffffffffffff41000000020001000000b3ffffffff380000c1ffffffff410000 +b8ffff00007dffffffc0000000030200000041fffffb00000000000000fbffff41000000 +020001000000b3ffffffff0000380000000300000035fffffb00000000000000fbffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00007fffc8000045ffffffff7f00 +00fffffffff70000003fcdffff850b000079ffffff7f0000004bffffff4e000035ffffff +ffffffffffffffffffffb200003dceffffff88000000f7ffffffc8000037ffffffb60000 +49ffffff00007fffffff350000c6ffffcf400000afffff85830000419182ffffb200003d +ceffffff88000000f7ffffff00000000c2ffffc3000000bcffff85830000419182ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00007fffff850000b3ffffff7f +0000ffffffff8a000087fffffffffffd0c0004ffffff7f00003fffffffffff450000ffff +ffffffffffffffffffffff000055ffffffffffffca00008affffffff8100007fffc40000 +3effffffff00007fffffff00007affffffffff002ac3ffffffff02008bffffffff000055 +ffffffffffffca00008affffff000000bfffffffffc300007affffffff02008bffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00007ffffffb000000f8ffff +7f0000ffffffff3a0006feffffffffffff830000bfffff7f0000caffffffffff850000ff +ffffffffffffffffffffffbf0005ffffffffffffffff7f003affffffffff4b0000c24800 +00c6ffffffff00007fffffff030000beffffffffffffffffffffff00007fffffffbf0005 +ffffffffffffffff7f003affffff000043ffffffffffff00007fffffffff00007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffba00007fff +ff7f0000ffffffff00007bffffffffffffffff00007affff7f0000ffffffffffff7f0000 +fffffff6fffffffffffff5ff7c00000300000000000000000000ffffffffffff03000000 +00bdffffffffff00007fffffff7e000000003689f6ffffffffffffff00007fffffff7a00 +000300000000000000000000ffffff000084ffffffffffff00007fffffffff00007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffff4d0000 +c3ff800000ffffffff000080ffffffffffffffff00007fffff7f0000ffffffffffff7f00 +00fffffa0000000000000000ff8500000000000000000000000000fdffffffffffca0000 +0058ffffffffffff00007fffffffff4700000000000031c0ffffffffff00007fffffff7f +00000000000000000000000000fdffff00007fffffffffffff00007fffffffff00007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffff07 +0036ff8a0000ffffffff000080ffffffffffffffff00007fffff7f0000ffffffffffff7f +0000fffffb0000000000000000ff850000898a868686868686868282ffffffffffffc100 +0000bdffffffffffff00007fffffffffffca3c0000000000003fffffffff00007fffffff +7f0000898a868686868686868282ffffff00007fffffffffffff00007fffffffff00007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffff +800000989b0000ffffffff000077fffffffffffffffc000079ffff7f0000ffffffffffff +7f0000ffffff8483878787878383ff7c0003fffffffffffffffffffffffffffffffffc00 +00000000c0ffffffffff00007ffffffffffffffffc907d0c000000baffffff00007fffff +ff790003ffffffffffffffffffffffffffff00007fffffffffffff00007fffffffff0000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffff +ffff3e001f780000ffffffff400004faffffffffffff7d0000c5ffff7f0000ffffffffff +ff7f0000ffffffffffffffffffffffffc5000080ffffffffffffffaeb0f6ffffffffff41 +000684020038ffffffffff00007fffffffb073ffffffffffffcb000078ffffff00007fff +ffffc5000080ffffffffffffffaeb0f6ffffff00007fffffffffffff00007fffffffff00 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffff +ffffffc80000050000ffffffff8e000080fffffffffff5080007ffffff7f0000ffffffff +ffff7f0000ffffffffffffffffffffffffff070000b8ffffffffffb600003fffffffff7c +000085ffc2000040ffffffff00007fffff870000b6ffffffffffff030089ffffff000086 +ffffffff070000b8ffffffffffb600003fffffff00007fffffffffffff00007fffffffff +000086ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffff +ffffffffff8600000000fffffffff901000036c4fffb7a0500007fffffff7f0000ffffff +ffffff7f0000ffffffffffffffffffffffffff7f0000007dfbfffb7d000000c2ffffffb3 +00004cffffff4d0000b2ffffff00007ffffffa0100007dfbffffc6390005fbffffff0000 +43fff9ffff7f0000007dfbfffb7d000000c2ffffff00007fffffffffffff00007fffffff +ff000043fff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fff +fffffffffffffa02000000ffffffffffbb00000000000000000047ffffffff7f0000ffff +ffffffff7f0000ffffffffffffffffffffffffffff4700000000000000000047fffffffd +000002fffffffffe020000fdffff00007fffffff800000000000000000007dffffffff00 +00000000f2ffff4700000000000000000047ffffffff00007fffffffffffff00007fffff +ffff0000000000f2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000072 +ffffffffffffffffb9000000fcffffffffffcb3a00000000000982ffffffffff720000fc +ffffffffff720000fcffffffffffffffffffffffffffff820900000000000981fffffff2 +240000bcffffffffffbc000024f9ff000072ffffffffb90300000000000880ffffffffff +b80000000074ffffff820900000000000981fffffffffc000072fffffffffffc000072ff +ffffffb80000000074ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8575 +c3ffffffffffffffffff8a8185fffffffffffffffffe908680c7ffffffffffffffc37585 +ffffffffffffc37585ffffffffffffffffffffffffffffffffffc7808980c7ffffffffff +c46d7cc3ffffffffffffffc37c6dc8ff8575c3ffffffffffffc7808980c7ffffffffffff +fffffc8e8678c3ffffffffffc7808980c7ffffffffffffff8575c3ffffffffffff8575c3 +fffffffffffc8e8678c3ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff726f74747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +74747463baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffd0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000074ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +0a0101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010101020a1a22222011040101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +0101030a000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +84ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7c797e6cc4ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff040000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +0081ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000078ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +fffffffffffffffffffffffff8fdfbffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffafffffffdecffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +fffffffffffffffffffffb751c0000006af0ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff8f77ffffff6300f3ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffff2a003d9091420000a7ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff006effffffc179ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffff2c00c4ffffffffc60000efffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0087ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffb900c3ffffffffffffbc0086ffffb36cfc7051aeffffffac60 +60acffffffffffffed6f656572efffffb75d003066b3ffb35dffffb36affb06060aeffff +ffffffffae615fb6ff67b3ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffff2500ffffffffffffffffc6ffffff7200200000b2ffff2900 +00000029ffffffffa6000000000000a6ff770000000073ff6f00feff7200230000000033 +ffffffff2c000000005f0072ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffff0072ffffffffffffffffffffffff7e0042ffffffff2900 +c6ffffc6002cffffa40044ffffffcd0000ffffff0080ffffff7900ffff7e0000c7ffff52 +00b6ffff2c0090ffff8e00007effffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffff007affffffffffffffffffffffff7b00d0fffffff100 +daffffffffdc00b3ffbd7effffffffff8600ffffff007bffffff7900ffff7b00cbffffff +ff0075fff30084ffffffff8e007effffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffff007affffffffffffffffffffffff7a00ffffffff80 +00736c66666c720076fffffffffff7ffc22400ffffff0079ffffff7900ffff7a00ffffff +ffff0079ff7d00ffffffffffff007affffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffff0067fffffffffffffffffcffffff7900ffffffff +7d000000000000000081fffffb731a0000000000ffffff0079ffffff7900ffff7900ffff +ffffff0079ff7800ffffffffffff0079ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffff6a00ffffffffffffffff6e4cfeff7900ffffff +ff7500fffffffffffffffffffe29003e9384e68900ffffff0079ffffff7900ffff7900ff +ffffffff0079ff7400ffffffffffff007affffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffc100abfffffffffffffb0026ffff7900ffff +ffffc500c1ffffffffffeef6ff7c00d0ffffffff7600ffffff007affffff7900ffff7900 +ffffffffff0079ffc500bdffffffffc2007dffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffff4400a8fffffffffa2f00caffff7900ff +ffffffff0026fdffffffa200bbff7300fdffffffa80000ffffff0074ffffff7900ffff79 +00ffffffffff0079ffff0026fdfffffb34007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffff45001e6a66590000c2ffffff7600 +ffffffffffbf00005c6f240041ffffc400005d6d18002a00ffffff000053b4ff7600ffff +7600ffffffffff0076ffffbf00005f5d0000007effffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffff983a00000078caffffffff7d +00fbffffffffffd13900000088ffffffffd139000033ded300baffffbc000075ff7d00fb +ff7d00fbfffffffb007dffffffd83a000050ff0079ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +fffdfffffffffffffffffffffffffffffffffffffffffffffffcfefffffffffffffffffd +fffffffdfffffffffffdffffaf61ffffffffffff0085ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7a00aaffffffff2d00feffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffa0600226b6a1c0081ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff8b00000035d0ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff030000008cffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffad566b6b6b6b707000000000357a6b6b6b6b6a57c0ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffb900000000000000000000000000000000000000f2ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff45000000000000000000000000000000000089ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffcb000000000000000000000000000000000affffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff440000000000000000000000000000008affffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffcb00000000000000000000000000000affffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff44000000000000000000000000008affffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffcb0000000000000000000000000affffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff4400000000000000000000008affffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffcc0000000000000000000005ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff44000000000000000000c5ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000000000045ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff4400000000000000ccffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcc00000000000044ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff440000000000ccffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffcc0000000044ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff44000000ccffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc000044ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c00cbff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc656ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f6fafffb +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff1f9ed6f6366696000000000 +002a6e6666636fedf9f1ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffcac662a0000000000000000000000 +00000000000000000000002a66acfcffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff8b0570000000000000000000000000000 +0000000000000000000000000000000057b0f8ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffeb752900000000000000000000000000000000 +00000000000000000000000000000000000000002975ebffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffed67000000000000000000000c0b0a0a0151a39a +9a9a9a9a9a9a9d9113070a0a0f000000000000000000000067edffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeb680000000000000000000351a9ffffffffffffff +ffffffffffffffffffffffffffffd78b170000000000000000000068ebffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa300000000000000000351a9ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd49b54030000000000000000a3ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffaf250000000000000056a9ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffa9560000000000000025afffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffb2220000000000000050daffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffda500000000000000022 +b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffa30000000000000052dbffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb520000000000 +0000a3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff2f00000000000052dbffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb0d0000 +000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff137000000000052dbffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99 +16000000000037f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa3000000000000d0ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff5a000000000000a3ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa400000000000ec8ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff9b040000000000a4ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff2f00000000005dffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffce0000000000002fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffc2f000000000059ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffdb5000000000002ffcffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7300000000005bffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff58000000000073ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa70000000000d1ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff9d0500000000a7ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffb70000000000cfffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd00000000000b7ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff605757 +57575750a2ffffffffffffffffffffffffffffffffff50acffffffffffffffffffffffff +ffe5b3ffffffa748fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff2f00000000cdffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffcd000000002fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000 +00000000000014adffffffffffffffffffffffffffffff006fffffffffffffffffffffff +ffff1065ffffff7300f5ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff310000000057ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff570000000031ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +82ffffffffff9d0000b4ffffffffffffffffffffffffffff0079ffffffffffffffffffff +ffffff007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff32000000005bffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff5b0000000032ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +007affffffffffffd20020ffffffffffffeeeeffffffffffff0079ffffffffffeeeeffff +ffffffe70074fff9fff9e5fffff8e6ffffeeeeffffffffffffffffeeedffffe4f8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffa6000000005fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5f00000000a6ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0079ffffffffffffff8a00efffffffa909000009a9ffffffff0079ffffffa909000009 +a9ffff680000000066ff7100fbff72009f0f000011a8ffffffffab0d000025e10072ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffb50000000008ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0800000000b5ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0079ffffffffffffffff007affff990045a2a245009affffff0079ffff990045a2a2 +45009affd48f0049a0cdff7800ffff7c000048a5960000eeffff9a000594930700007dff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff3000000000ccffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffcc0000000030ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0079ffffffffffffffff0078ffff005affffffff5d00eeffff0079ffff005affff +ffff5d00f1ffff0084ffffff7900ffff7e0061ffffffd4007dffff003fffffffff4c007e +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffa300000000ceffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffce00000000a3ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0079ffffffffffffffff0079ffaf00f3fff2f2fff4007bffff0079ffaf00f3ff +f2f2fff4007bffff0079ffffff7900ffff7a00ffffffffff0079ffaf00d1ffffffffd500 +7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffef0000000047ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4900000000ef +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0079ffffffffffffffff0078ff7900000000000000006fffff0079ff790000 +0000000000006fffff0079ffffff7900ffff7900ffffffffff0079ff7500ffffffffffff +007affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7100000001d3ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd000000000 +71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0079ffffffffffffffb5008eff7900a2a19c9c9c9d91d0ffff0079ff7900 +a2a19c9c9c9d91d0ffff0079ffffff7900ffff7900ffffffffff0079ff7700ffffffffff +ff0079ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff6000000008dffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff470000 +0000f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0079ffffffffffffff6700feff8b00ffffffffffffffffffff0079ff8b +00ffffffffffffffffffff0079ffffff7900ffff7900ffffffffff0079ff8b00f5ffffff +fff6007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff3300000049ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd301 +00000033ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff007dffffffffffffa50053fffffd006dfffffffff94dbbffff0079ff +fd006dfffffffff94dbbffff0082ffffff7900ffff7900ffffffffff0079fffd006effff +ffff78007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffb600000000d0ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +9100000000b6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0071fff2f2f5eb5e0000ffffffff4f005eebfdae0900f2ffff0079 +ffff4f005eebfdae0900f2ffff002deefbff7900ffff7900ffffffffff0079ffff4e005d +eeed5d00007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff2f0000005effffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0e0000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffc00000000000000004bd8ffffffffff570000000000c7fffffc00 +6bffffff570000000000c7ffffff51000067ff6b00fcff6b00fcfffffffc006bffffff59 +0000000096007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffb20000000fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff8e00000000b0ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff9c9d9e9e9e9e96d7ffffffffffffffffd6969ca4ffffffffff +8fceffffffffd6969ca4ffffffffffffa28ecfffce8fffffce8fffffffffff8fcefff7ea +ffd99696e0ff0074ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff6a00000091ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff1000000081ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff69 +00faffffffffa400c9ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7a00000030ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +c60013adf9fb9d0038ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffb50000000cffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffd000000000f1ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff97050000000048deffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff6b0000007effffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0e00000086ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffa49d97d6ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff00000000091ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff790000002effffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff8500000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffd000000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff2f0000004effffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0e000000b4ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffff1000000007cffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff790000006affffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f00000000d1ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd100000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7e00000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff8500000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00000000b2ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffa58effffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff2d0000000bffffffffff +ffffffffffffffe6edefefeff0eaffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff3ffffffffffffffffffffffff0b0000007bffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff73001fa7ffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000080ffffffff +fffffffffffffffb000000000000000ca4ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7d71ffffffffffffffffffffffff8000000080ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001ea7ffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffff0048b3a0a1a3980c0021f7ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0070ffffffffffffffffffffffff7f0000006effffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000000000246ae5ffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffff0083ffffffffffff600066ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0089ffffffffffffffffffffffff7f00000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f00000000000000005ee8ffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007dff +ffffffffffffffffffffff0079ffffffffffffff4100ffffffffff9c47479cffffffffff +4ec0ac3d4cffac4fffa0444ba0ffff99474b9fffffffffffe1584b4c5de2ffffffff4ebb +f257495de1ffffab4400244ba7ffffffffffffffffffff7d00000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f000000000000000000005ee8ffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb20000000091 +ffffffffffffffffffffffff0079ffffffffffffffd400acfffffb1a000000001afbffff +ff000d000042ff74008800000000b42800000000b0ffffff9600000000000095ffffff00 +110000000000adff7f000000007cffffffffffffffffffff9100000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff8d0000000000000000000000004da0ffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7b00000000 +ffffffffffffffffffffffffff0079ffffffffffffffff0075ffff2200a7ffffa70022ff +ffff0000d5ffffff7e0000d1ffdd000846e5ffdd001dffff9a0055ffffffdd0000feffff +000060ffffdd001dffffff0084ffffffffffffffffffffffffff00000000b2ffac475a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a +5a5a5a5a5a5a5a5a5a5a59682d00000000000000000000000000001da5ffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +00ffffffffffffffffffffffffff0079ffffffffffffffff0079ffac0091ffffffff9100 +acffff004bffffffff7b00d6ffffff7e00d8ffffff7a00ffffc994ffffffffff8900ffff +ff004dffffffff7a00ffffff007affffffffffffffffffffffffff000000007bff750000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000001da5ffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +0000ffffffffffffffffffffffffff0079ffffffffffffffff0079ff7600ffffffffffff +0076ffff007dffffffff7a00ffffffff7a00ffffffff7a00ffffffffffffe8f6ad1700ff +ffff007effffffff7a00ffffff0079ffffffffffffffffffffffffff000000007dff7f00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000001beff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d00 +000000ffffffffffffffffffffffffff0079fffffffffffffff20074ff7900ffffffffff +ff0079ffff0079ffffffff7900ffffffff7900ffffffff7900fffffff55c0a0000000000 +ffffff0079ffffffff7900ffffff0079ffffffffffffffffffffffffff0000000091ff7b +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000001692fc +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91 +00000000b2ffffffffffffffffffffffff0079ffffffffffffff8100d1ff7300ffffffff +ffff0078ffff0079ffffffff7900ffffffff7900ffffffff7900fffff6190053aa9bf98e +00ffffff0079ffffffff7900ffffff0079ffffffffffffffffffffffffb200000000ffff +880012111111111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111111111111111 +111111111111111111111111111111111111111111111111111111111111111111111111 +1111111111111111111111111111111a0800000000000000000000000000000019a3ffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007bffffffffffffffffffffffff0079ffffffffffffff1c00ffffcf00b5ffff +ffffb8008effff0079ffffffff7900ffffffff7900ffffffff7900ffff7700dfffffffff +7000ffffff0079ffffffff7900ffffff007bffffffffffffffffffffffff7b00000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff8a0000000000000000000000000019a4ffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffff0088ffffffffffeb2400cbffffff001bee +ffffee1c00ffffff0079ffffffff7900ffffffff7900ffffffff7900ffff7300f0ffffff +950000ffffff0079ffffffff7900ffffff006dffffffffffffffffffffffff7f00000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000000000000001aa4ffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffff001a5a4c4c4f4600005effffffffcd00 +0047470000ceffffff0075ffffffff7500ffffffff7500ffffffff7500ffffce00004653 +06003600ffffff0075ffffffff7500ffffff00003ba8ffffffffffffffffffff7f000000 +4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000000000000000001aa4ffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000000085fffffffffffffffffffffffb160000000000004fe2ffffffffffff +df4c00004cdffffffffb0183ffffffff8301fbffffff8301fbffffff8301fbffffde4c00 +0046eddc04b8fffb0183ffffffff8301fbffffcc0c007cffffffffffffffffffff850000 +0083ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f000000000000001aa4ffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0d0000002bffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2b00 +00007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f00000000001aa4ffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff8000000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00000092ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001aa4ffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f00000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff74001ba6ffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7800000000b0ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b200000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff908dffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd20000000081ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff690000004dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff100000002bffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000000096ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff9300000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffb200000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000b2ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff690000004fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff4f00000069ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007cffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff9500000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffb000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff12000000f2ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff6a00000011ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7b0000006cffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffef000000007bffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffcf00000000efffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff6c00000000cfffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff4c0000006fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffef000000004cffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffd400000000b2ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff6c00000000d4ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff4c0000002affffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffef000000004cffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffd400000000b4ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff6c00000000d4ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6500000026f9ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffef0000000065ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1200000069ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff6c00000012ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9300000000 +f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff50000000093ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff120000 +0029fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffb2900000012ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9100 +0000002affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff2a0000000091ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +64000000009dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff9d0000000064ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff4f000000009bffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff9b000000004fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd7000000000096ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff960000000000d7ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffd90300000000f2ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff20000000003d9ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffda0400000028fdffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffe2800000004daffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd50000000026ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe52b00000000d5ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff64000000001aa1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff97000000000064ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff66000000000099ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff95000000000066ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff6400000000009bffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffb24000000000064ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffae0b0000000051f4ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffe42b000000000baeffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffdb040000000025ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff97000000000004dbffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd903000000001b9effffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffdf57000000000003d9ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffd41b0000000000179dffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffde540000000000001bd4ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff6a000000000000179dff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff91000000000000006affffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b00000000000000 +179dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9d17000000000000006bffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe96300000000 +00000015a2e8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffe8a2150000000000000063e9ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5d00 +000000000000001b4d98efffffffffffffffffffffffffffffffffffffffffffffffffff +ffe9994d1b00000000000000005debffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +aa2100000000000000000000475adde9e0ffffffffffffffffffffffffffffffe7e5ef99 +4d1b0000000000000000000021aaffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffac21000000000000000000000000001b574e4f4699efe6e9dd574c4e514a000000 +000000000000000000000021acffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffab2217000000000000000000000000000000000000000000000000000000 +0000000000000000001722abffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffbe64100000000000000000000000000000000000000000000000 +000000000000001064beffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffb9a62900000000000000000000000000000000000000 +000000000029a6b9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe3aab5a924181b1b1a000000000000201a1b +1824a9b5aae3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6afb2b2aae4ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdde3e5db +f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa000000 +0073ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffbcb43333445d4ffffffffffdb +a5ffffffffffffffffffffffffffffffffffffffffffdba5ffffff9628fbffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffed0600050b10000044ffffffff +0067ffffffffffffffffffffffffffffffffffffffffff0067ffffff8000f7ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff5500bcfffffff6630087ffff +ff007dffffffffffffffffffffffffffffffffffffffffff007dffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0081ffffffffffff4000fe +fad1006aebeffffffffcd8ded8fcffffffffedd4ffdfdadfdb006aebefffeeccffffffce +f9ffdedbdefffffffffffffdd9d8fbffcfedffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0065ffffffffffffdea9 +ff670000000062ffff91000000000095ffffff6e00730000000000000062ff6b00fbfffa +00524e0000003be9ffffff930000000fcc006effffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff47004bd5e2ffffffff +ffffe2ad0059c1deff78005fc3bbb50400a0ffff7d000bb0c6ebb40059c1dbff7800ffff +ff000001b0c56c0059ffff83001eb2b11e00007dffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd91a000000364ecd +f9ffffffff0081fffff90f63ffffffffef0078ffff7e00a1ffffffff0081ffffff7900ff +ffff000ae7ffffff5300ffff004cffffffff59007effffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc76b1a0000 +000df4ffffff0079ffffffffffffffffffe2007bffff7a00ffffffffff0079ffffff7900 +ffffff007fffffffff7d00ffaa00deffffffffe0007bffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea +bd73000cedffff0079fffffffffac941332c00007dffff7900ffffffffff0079ffffff79 +00ffffff0079ffffffff7900ff7c00ffffffffffff007affffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a35ffffffff +ffffffe50075ffff0079fffffff20800070a1fad007bffff7900ffffffffff0079ffffff +7900ffffff0079ffffffff7900ff7d00ffffffffffff0079ffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a00aaffff +ffffffffff0073ffff0079ffffff0f00bdffffffff007affff7900ffffffffff0079ffff +ff7900ffffff0079ffffffff7900ff9b00ecffffffffee007bffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0711fe +ffffffffff8e00d4ffff0083ffffff008cffffffff92007effff7900ffffffffff0083ff +ffff7900ffffff0079ffffffff7900ffff005fffffffff6b007effffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9300 +0094e5e0d4400064fffffe001fd6f6ff000099e8d23500007fffff7900fffffffffe001f +d6f0ff7900ffffff0079ffffffff7900ffff630041d7d63f00007effffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b21c000000000070ffffffff66000063ffd91600000012d80244ffff6900fbffffffff66 +000063ff6900fbfffb0069ffffffff6900fdffff7500000000b4007bffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffbfb9bcb6e8ffffffffffffbdafddffffffbfb9bfffffdeaaffffdcaaffffffffff +ffbdafddffdcaaffffffaadcffffffffdcaaffefd3ffebb6b4f3ff0073ffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff6600f2ffffffff8e00d5ffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd3000093e4e6830044ffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffb11b0000000064ebffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffc0bbb7eaffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0500000090ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb726393b3b3b3f +43000000001e473b3b3b3b3926b7ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0900000000 +0000000000000000000000000009ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0000000 +0000000000000000000000000000a0ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1900 +000000000000000000000000000019ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0 +0000000000000000000000000000009cffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff1b0000000000000000000000000059ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff9f00000000000000000000000000deffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff1b000000000000000000000057ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff9f0000000000000000000000ddffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff1c0000000000000000007bffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffc3000000000000000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdc000000000000000055ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5700000000000000dfffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffdf00000000000057ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff570000000000dfffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffdf0000000057ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57000000dfffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffdf000059ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff4f00ddffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe285ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffd4d1d5dedbffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff8ccd5c94035373a3400000000000c3e37373540c9d5ccf8ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdd83350c000000000000000000000000000000000000000000000c +3583ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff7d5872a0000000000000000000000000000000000000000000000000000 +000000002a87d5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffc9440900000000000000000000000000000000000000000000000000000000 +00000000000000000944c9ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffca3b000000000000000000002c2f2e2e257bd2c9c9c9c9c9c9c9ccc0372b2e2e +3408000000000000000000003bcaffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc83c000000000000000000247bd5ffffffffffffffffffffffffffffffffffffff +fffff6b83f040000000000000000003cc8ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7b0000000000000000247bd5ffffffffffffffffffffffffffffffffffffffffff +fffffffffffff2cb7d2400000000000000007bffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffe84060000000000000180d5ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffd580010000000000000684feffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff8802000000000000017cfaffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffa7c010000000000000288ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fc7b000000000000017cfaffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffa7d050000000000007bfcffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ef100000000000017cfaffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffea3100000000000010efffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +cc1900000000067dfaffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffc539000000000019ccffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f000000000010f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7e0000000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa +7c000000000033e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81700000000007c +faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee +10000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb0c00000000 +0010eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8 +1000000000007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8760000 +00000010e8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5e000000000585ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d +00000000005effffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +800000000013efffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffc8180000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a20000000014ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffee1400000000a2ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f01900000000e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffe50000000019f0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eb13000000007affffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7a0000000013ebffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffd3324212020201a75fcffffffff +fffffffffffffffffffffffd2194ffffffffffffffffffffffffffcf9bffffff8c13faff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff19000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000000019ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0001291e1e1f1a000084ffff +ffffffffffffffffffffffffff0073ffffffffffffffffffffffffff0068ffffff8a12f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff840000000084ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff840000000084ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0088ffffffffffcc0c009d +ffffffffffffffffffffffffffff0079ffffffffffffffffffffffffff007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff9f0000000019ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff19000000009fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0079fffffffffffff007 +0bfffffffffff3c7c7f3ffffffffff0079fffffffff3c7c7f3ffffffecc00062d6e5ffe4 +baffffffbcf1ffcec9cefffffffffffff3c7c6f3ffbee4ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff1d00000015eaffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffea150000001dffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffffff +a300e0ffffff7e000000007effffffff0079ffffff7e000000007effff620000000060ff +6a00fcfffc00463a00000028e2ffffff8200000003ba006dffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffa400000000e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffe700000000a4ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffff +ffff0074ffff700073d6d6730073ffffff0079ffff700073d6d6730072ffefc00062d6e5 +ff7900ffffff00000ac6da7d0050ffff72002fc6c53000007effffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff1f00000059ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5b0000001fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffff +ffffff0079ffff008bffffffff8c00dbffff0079ffff008bffffffff8c00ddffff0080ff +ffff7900ffffff0014f2ffffff5a00ffff0057ffffffff63007effffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f00000015eaffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe2000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffffff +ffffffff0079ff9c00d3d8cdcdd8d40075ffff0079ff9c00d3d8cdcdd8d40075ffff0079 +ffffff7900ffffff0080ffffffff7c00ffa100e5ffffffffe8007bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffe100000000a6ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff5b00000000e1ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffff +ffffffffff0077ff7a000000000000000070ffff0079ff7a000000000000000070ffff00 +79ffffff7900ffffff0079ffffffff7900ff7c00ffffffffffff0079ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5b0000001dffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffe2000000005bffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffff +ffffffffffa0009eff7800d1d4cecececec4e7ffff0079ff7800d1d4cecececec4e7ffff +0079ffffff7900ffffff0079ffffffff7900ff7c00ffffffffffff0079ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffe000000000a2ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff5b00000000e0ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ff +ffffffffffff5600ffff9c00f0ffffffffffffffffff0079ff9c00f0ffffffffffffffff +ff0079ffffff7900ffffff0079ffffffff7900ffa300e5ffffffffe7007bffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5a0000005fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffe2000000005affffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0080 +ffffffffffff7e0079ffffff0055ffffffffe61eb3ffff0079ffff0055ffffffffe61eb3 +ffff0081ffffff7900ffffff0079ffffffff7900ffff0055ffffffff61007effffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffde00000000e2ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff5b00000000deffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +5edfcbcbcec22f000dffffffff74002ec2d6800000ffffff0079ffff74002ec2d6800000 +fffffe0014c3e8ff7900ffffff0079ffffffff7900ffff74002dc5c42d00007effffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000005bffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb +00000000000000007cf5ffffffffff830000000026e5fffffc0069ffffff830000000026 +e5ffffff76000061ff6900fcfffc0069ffffffff6900fdffff8700000006c5007bffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff20000000e7ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f0000001cff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffc9ccd0cfcfd0c9f4fffffffffffffffff4cacfd1ffffffffffbde5fffffffff4cacfd1 +ffffffffffffcfc3e7ffe5bdffffffbde5ffffffffe5bdffe6c3fff9cac9ffff0074ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff9f00000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa400000000 +e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff6500e7ffffffff7d00ddff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff5b00000061ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffdc00007fd2d471004dff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007dffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5e00 +00005effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc22d0000000079f4 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa400000000e2ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4 +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd1cfc9f4ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff1a0000001effffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00000000a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe10000000083ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff5e0000005bffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7900000000a1ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa400000000feffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffc6ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f00000001ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff01000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffc42d00f9ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff8500000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000009effffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffc435000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff190000001dffffffffffffffffffffffffffffffffff +ffffffffc2c5c9c8c8c8c9c2f0ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe1b7ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff1d0000007cffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffc4350000000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000086ffffffffffffffffffffffffffffffff +fffffffffa0000000000000000007effffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff6a00fbffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff8600000082ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffc43500000000000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffff0061e6d0d1d1d3ce10009cffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7900ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000005effffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffc4350000000000000000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffff007ffffffffffffff40b09ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7d00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f00000000feffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffc433000000000000000000 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007cffffffffffffffffffffffffff +ffffffffffffffff0079ffffffffffffff8500fffffffff46a13136af4ffffffffffbb25 +18192cbdffffffffffbb25162bdc8700ffbe1bd8ffffffff931af8ffffffffffffffffff +ffffffffffffffffffffff7c00000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffc23300000000000000000000 +000004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9e00000000a3ffffffffffffffffffffffff +ffffffffffffffffff0079ffffffffffffff5900ffffffe4000029290000e5ffffff6e00 +1f252b000071ffffff6e001e2c00000600ffff0072ffffffff0045ffffffffffffffffff +ffffffffffffffffffffffffa300000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffc2330000000000000000000000 +00000000352e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d +2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282ffdff7c00000001ffffffffffffffffffffffff +ffffffffffffffffffff0088fffffffffffc710053ffffff0000f7fffff70003ffff8600 +7cfffffffc1200fdff960084ffffff810000ffff5003ffffffdd00a0ffffffffffffffff +ffffffffffffffffffffffffffff010000009effffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000083ffb532000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000ffff7f00000000ffffffffffffffffffffff +ffffffffffffffffffffff000424181d283000002fe4ffffdc00ffffffffffff0097ffe1 +c4ffffffffff8d00ffff4a0cffffffffff1d00ffffa000ddffff7500ffffffffffffffff +ffffffffffffffffffffffffffffff000000007cffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000089d700000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000ffff7f00000000ffffffffffffffffffff +ffffffffffffffffffffffff000c322823000022daffffffff7800291b18181b260074ff +fffffff2c1ce7c0000ffff007cffffffffff7f00ffffff0075ffff0250ffffffffffffff +ffffffffffffffffffffffffffffffff000000007cffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000083fffa8606000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000ffff7c00000000ffffffffffffffffff +ffffffffffffffffffffffffff0089ffffffcc001fffffffffff7d00312a26262629209b +ffffe127000000010f00ffff0079ffffffffff7900ffffff5002ffe400a0ffffffffffff +ffffffffffffffffffffffffffffffffff00000000a3ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffff8606000000000000 +00000000000000003e3b3737373737373737373737373737373737373737373737373737 +373737373737373737373737373737373737373737373737373737373737373737373737 +373737373737373737373737373737373737373737373737373737373737373737373737 +373737373737373737373737373737373737373737373737373737373737373737373737 +373737373737373737373737373737373737373737373737373737373737373737373737 +373737373737373737373737373737373737373737373737373737373737373737373737 +37373737373737373737373737373737373737323afcffa3000000009effffffffffffff +ffffffffffffffffffffffffffff0079ffffffff7f0077ffffffff7400ffffffffffffff +ffffe0000084d9cbff9300ffff007affffffffff7e00ffffffa000ff8400ffffffffffff +ffffffffffffffffffffffffffffffffff9e00000001ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff8707000000 +000000000000000005ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff010000007cffffffffffff +ffffffffffffffffffffffffffffff0079ffffffffff5a009dffffffe3009fffffffffff +b6dbff7100feffffffff5c00ffff5006ffffffffff1700ffffffff007c2150ffffffffff +ffffffffffffffffffffffffffffffffffff7c00000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff8707 +00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffff0079ffffffffffed0a03e7ffffff0903c8fffffd +6400cfff7400cbfffffb690000ffff9b006ffefffd750000ffffffff570000a2ffffffff +ffffffffffffffffffffffffffffffffffffff7f00000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ff87070000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffff0072ffffffffffffa30043ffffffed01001420 +000077ffffe60400141e000f5100ffffff7b00002300000500ffffffffa50000ffffffff +ffffffffffffffffffffffffffffffffffffffff7f00000063ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffff8707000000000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000085ffffff +fffffffffffffffffffffffffffffffffffd2797ffffffffffffff7e18b4fffffffc7c22 +2638c8fffffffffb7c222075fff029b7ffffffc8382438daa72efdffffffff0059ffffff +ffffffffffffffffffffffffffffffffffffffffff8500000081ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffff870700000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1f00000019ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1009fffff +ffffffffffffffffffffffffffffffffffffffffffff190000007cffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffff87070000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8600000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e07ffff +ffffffffffffffffffffffffffffffffffffffffffffff00000000a3ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffff8009f3ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c02009eff +ffffffffffffffffffffffffffffffffffffffffffffffff00000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +fffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7a000000 +009dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff940e82ff +ffffffffffffffffffffffffffffffffffffffffffffffffa000000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe50000 +000083ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff580000005fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1e +00000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000a7ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +aa00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffa000000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00000000a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff5800000062ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5f00000058ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffa400000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa000000000e5ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff24000000e3ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b00000021ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff8100000056ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde0000000081ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffe300000000deffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5600000000e3 +ffffafecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5f00000059ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde000000005f +fffffe00002c32bbc4c7ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffe6000000009cffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5600000000 +e6ffffffa8000000000000272176cbc7ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5f00000019ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc00000000 +5fffffffffff2300000000000000000000272176cbbcf0ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffe400000000a1ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56000000 +00e4ffffffffffa9000000000000000000000000000000042b2ea2dcffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff890000000fe4ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc000000 +0089ffffffffffffff23000000000000000000000000000000000003ddffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffefabdbffffffffffff2400000054ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff560000 +0024ffffffffffffffffa90000000000000000000000000000000000a8ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffefbcc5b930242e0000d4ffffffffffffa900000000e1ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10000 +0000a9ffffffffffffffffff2300000000000000000000000000000089ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c0cb +741f272e04000000000000005fffffffffffffffff230000000ee3ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30e00 +000023ffffffffffffffffffffa9000000000000000000000000000063ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbba731f29260000 +00000000000000000000000000e5ffffffffffffffffa60000000014ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1400 +000000a6ffffffffffffffffffffff260000000000000000000000001aedffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2000000000000 +000000000000000000000000005effffffffffffffffffff8c000000007affffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7a00 +0000008cffffffffffffffffffffffff81000000000000000000000002fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a00000000 +000000000000000000000000001bf0ffffffffffffffffffffff1f0000000075ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7500 +0000001fffffffffffffffffffffffffffe500000000000000000000000079f3ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff220000 +0000000000000000000000000000adfffffffffffffffffffffffff21b0000000070ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7000 +0000001bf2ffffffffffffffffffffffffffff6200000000000000000000000008e8ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb00 +000000000000000000000000000023ffffffffffffffffffffffffffffed0000000000e0 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000 +00000000edffffffffffffffffffffffffffffffe700000000000000000000000000007b +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +860000000000000000000000000000abffffffffffffffffffffffffffffff8500000000 +0de6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe70d +0000000085ffffffffffffffffffffffffffffffffff620000000000002b880000000000 +0078ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7200000000000000000000000022ffffffffffffffffffffffffffffffffff8b0000 +00000ce9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf12 +000000008bffffffffffffffffffffffffffffffffffffe700000000001dfcffd71e0000 +00000029e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa9000000000000000000000000a8ffffffffffffffffffffffffffffffffffff64 +00000000007affffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7200 +0000000064ffffffffffffffffffffffffffffffffffffffff6200000000a9ffffffee42 +000000000011bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff36c00000000000000000000000066ffffffffffffffffffffffffffffffffffffff +ed18000000000074ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16d00 +0000000027f9ffffffffffffffffffffffffffffffffffffffffe70000008bffffffffff +ff8d00000000000072ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffbd0c00000000000000000000000000e7ffffffffffffffffffffffffffffffffffff +fffff418000000000076ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe50500 +000000002969edffffffffffffffffffffffffffffffffffffffffff600063ffffffffff +ffffff940d00000000006bf2ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff74000000000000190000000000000062ffffffffffffffffffffffffffffffffffff +ffffffffff85000000000028deffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd1000 +00000000a79c00007affffffffffffffffffffffffffffffffffffffffd915e8ffffffff +fffffffffff918000000000006e7ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffe32800000000001bebb200000000000000e6ffffffffffffffffffffffffffffffffff +ffffffffffffff8900000000000ae8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff740000 +0000000098fe1c0000006bf2fffffffffffffffffffffffffffffffffffffff0ffffffff +ffffffffffffffff850000000000007affffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7c00000000000083ffffff6300000000008affffffffffffffffffffffffffffffffff +ffffffffffffffffffd721000000000072f4ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba2e0000 +00000021daff31000000000006e7ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff8900000000000076ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +e22800000000001fd8ffffffffef1b00000025ffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff51700000000000071f3ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb62c000000 +00000017f5ffffe74200000000000078ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd81f000000000027e0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7b00000000000043f0ffffffffffffec000000acffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff880000000000000071f3ffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff46a00000000 +00000087ffffffffffff8b0000000000006bf0ffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffff04300000000000fbcffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 +2700000000000e96ffffffffffffffffff8c001fffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffff3ff940b0000000000000071f3ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3710000000000 +00000b93ffffffffffffffffd81f000000000006e5ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff8d00000000000072ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc +0f000000000043f3ffffffffffffffffffffff0e98ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffe21a09ffffff8f0c0000000000000075caffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffca75000000000000 +000c8ffffffffffffffffffffffff043000000000010bcffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff950f00000000006af0ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffdfb1bebdbdbdbdbbc0ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffacdbff +ffffffffffffffffffffdbabffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffabb1ffffffffff +ffffffe19dd9ffabdbffffffffffffffffffffffffffacdbffffffffffffffffdbacffff +ffabdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff267 +00000000000d98fffffffffffffffffffffffffff3ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7b00000073ffffffff8500000000000000001970caffff +ffffffffffffffffffffffffffffffffffffffffffffffffffecc0731900000000000000 +0085ffffffffffffffffffffffffffffff8c00000000000073ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff918000000000006e7ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff6e0000000000000000 +1cdcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0069 +ffffffffffffffffffffff5c00f2ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f00d7ffffff +ffffffff3e00e5fa005cfffffffffffffffffffffffffb0069ffffffffffffffff6900fb +fff2005cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc0c +000000000044f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffe2260000000000ceffffffffd34600000000000000000019 +70cafffffffffffffffffffffffffffffffffffffffffff0ad3300000000000000000000 +46d3ffffffffffffffffffffffffffffffffffd921000000000026e0ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8700000000000078ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7b00dae1dbdcdbe7 +8a0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +79ffffffffffffffffffffffecc9ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1300deff +ffffffff6900a6ffffc9ecffffffffffffffffffffffffff0079ffffffffffffffff7900 +ffffffc9ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06700 +00000000008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff790000000000003cdeffffffffffffd54800000000000000 +00000021242324212db4c0bdbdbdbdbdbdc6701b2423232a020000000000000000000048 +d5fffffffffffffffffffffffffffffffffffffffff51900000000000fbaffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff8a00000000000075ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7900ffffffffff +ffff910095ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0079ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb0049 +ffffffffd9005cffffffffffffffffffffffffffffffffffff0079ffffffffffffffff7e +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba0c00 +000000001fd8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffe02700000000000f97ffffffffffffffffffffd24b3c000000 +0000000000000000000000000000000000000000000000000000000000000000003c4bd2 +ffffffffffffffffffffffffffffffffffffffffffffffff8800000000000071ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd921000000000026 +deffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7900ffffffff +ffffffff0078ffffffffae190919aeffffffffffec5d070e0964edffffffffec5d07096b +f0007aff425dffffffffff1188ff8c12fdff8d22e761070964ebffffffffed64090873ff +1d8dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87 +0097ffffff030af0fffffd128cffffffec5d07075decffffffff0079ffffffae190a1fd0 +8500fffffd128cfffd1898c2190a20b1ffffffffffb2200b1af0a417fdffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef680000 +0000000086ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7900000000000045f3ffffffffffffffffffffffffffffe68f +37000000000000000000000000000000000000000000000000000000000000378fe6ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff951000000000006aefff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef4500000000 +0010baffffffffffffffffffffffffffffffffffffffffffffffffffffffff7900ffffff +ffffffffe40077ffffff65002b352b0065ffffffdd00003735300000daffffdd0000392d +0000007eff6d00ffffffff9400dfff7400ffff7800000039300003ffffffdd00002e2d00 +180078ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff1400e4ff6a00a6ffffffff0074ffffdd000037370000deffffff0079ffff65002b3a00 +000100ffffff0074ffff0000002a3b030093ffffff6800004000000400ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6070000 +0000001fd8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe02700000000000f97ffffffffffffffffffffffffffffffffff +ffffdfd05310000000000000000000000000000000000000000000001053d0dfffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff819000000000007 +e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e0000 +0000000073ffffffffffffffffffffffffffffffffffffffffffffffffffffff7a00ffff +ffffffffbc0300e4ffff90008cffffff8c0092fffb0000faffffff970075ffff000afeff +ffde23007fffe60097ffffff450cffff7900ffff7e001cfcffff940095ffff000fddffff +db1f007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff60354ec0087ffffffffff0079ffff0007fefffffe0800ffffff0079ff92008dffff +ff8b0000ffffff0079ffff000090ffffff1303ffff920087ffffff870000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff79000000 +00000086ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7900000000000045f4ffffffffffffffffffffffffffffffffff +fffffffffffffdd7e0d44b3f42453f0000000000134942423f4bd4e0d7fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8800000000 +000077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95 +10000000000025ddffffffffffffffffffffffffffffffffffffffffffffffffff7e001b +100f18231a00008effffff4463ffffffffff6901ffffcaf5ffffffffff007bffd800abff +ffffffb2007effff0c45ffffff0079ffff7900ffff7b00f5ffffffff0077ffd800acffff +ffffb2007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffa5000017ffffffffffff0079ffd600ffffffffffff0093ffff007aff4511ffff +ffffff2100ffffff0079ffff0066ffffffff8100ffff4511ffffffffff2100ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe025000000 +00001fdaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdf2400000000000f97ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffdddcddddd7feffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0000 +000000006aefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffa19000000000009e6ffffffffffffffffffffffffffffffffffffffffffffffff7d00 +3c363807000092ffffffffff00001b0c0c0c190000feffffffffbebab027007eff7300ff +ffffffffff007affff7900ffff9600e7ffff7900ffff7900ffffffffff0079ff7300ffff +ffffffff007affffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff6500f2ffffffffffff0079ff76001e0f0c0c0e1a0074ffff007eff007dff +ffffffff8000ffffff0079ffff007bffffffff7900ffff007dffffffffff8000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7800000000 +000089ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffb90e000000000046f4ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda +22000000000005e4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff8900000000000076ffffffffffffffffffffffffffffffffffffffffffffff7a +00ffffffff6000abffffffffff001242333434353744fdffff6b0000000034007dff7900 +ffffffffffff0079ffffe70099ff450effffff7900ffff7900ffffffffff0079ff7900ff +ffffffffff0079ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7c00ffffffffffffff0079ff7d003d38343434362da2ffff007fff0079 +ffffffffff7900ffffff0079ffff0079ffffffff7900ffff0079ffffffffff7900ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02500000000 +000f97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffff06600000000000f99ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fff14600000000000075ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9710000000000068efffffffffffffffffffffffffffffffffffffffffff +7900fffffffff21000e1ffffffff0089ffffffffffffffffff64003dd2dde6ff007aff75 +00ffffffffffff007affffff0d50ff0079ffffff7900ffff7900ffffffffff0079ff7500 +ffffffffffff007affffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7900ffffffffffffff0079ff7600ffffffffffffffffffff007eff00 +79ffffffffff7d00ffffff0079ffff0079ffffffff7900ffff0079ffffffffff7d00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff760000000000 +0046f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffb90b000000000047f4ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff8e00000000000073ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffb1d000000000004e2ffffffffffffffffffffffffffffffffffffff +ff7900ffffffffffec0005ffffffff5501ffffffffffdfa8ffff006cffffffffe8007bff +e7009affffffffa2007effffff78009600e7ffffff7900ffff7900ffffffffff0079ffe7 +009affffffffa2007effffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7900ffffffffffffff0079ffe7009affffffffffacd7ffff007aff +5401ffffffffff1300ffffff0079ffff0079ffffffff7900ffff5401ffffffffff1400ff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0680000000000 +0f99ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff0660000000000008effffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffda22000000000025ddffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff04600000000000fb9ffffffffffffffffffffffffffffffffff +ffff7900ffffffffffff8b006dffffffa10064f6ffffba003fffff004dffffffb607007e +ffff0f00bcffffbd12007fffffffe600001cffffffff7900ffff7900ffffffffff0079ff +ff0f00bcffffbb0c007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7900ffffffffffffff0079ffff0f00bcfffff65a00d4ffff0079 +ffa10064f6fff66b0000ffffff0079ffff0079ffffffff7900ffffa10064f6fff5650000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb90b0000000000 +46f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffb90b00000000001edaffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffff14600000000000eb9ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff8d00000000000072ffffffffffffffffffffffffffffff +ffffff7100ffffffffffffff1700c8ffffff85000012090008edffff8100001204007400 +6dfffff20a000a0a000a0076ffffffff230082ffffffff7100ffff7100ffffffffff0071 +fffff30a000a09003b007dffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7100ffffffffffffff0071fffff20a000912000082ffffff00 +71ffff8500001600000900ffffff0071ffff0071ffffffff7100ffffff86000016000b1c +00fffffffffffffffffffffffffffffffffffffffffffffffffffffff066000000000010 +99ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff06600000000000087ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff9100000000000072ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffdc23000000000023dcffffffffffffffffffffffff +ffffffff9c32feffffffffffffed3455fdffffffd244322e87ffffffffffd2442f3ed2ff +8353ffffffff872e2e8bff409dffffffff8400eaffffffff9c32feff9c32fefffffffe32 +9cffffffff882e2d97ff0077ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff9e33fefffffffffffe339effffffff872f3445d2fffffffe +339effffffd2453245e4af39fdfffe339efffe339effffffff9e33ffffffffd7453240ff +9400ffffffffffffffffffffffffffffffffffffffffffffffffffffb70b00000000001b +faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffb70b000000000020dbffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff9812000000000023ddffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffff61a000000000009e5ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff460dffffffffffffffffffffffffffffffff +ffffff8513ffffffffffe500a1ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0d95ffffffff +ff4b0bffffffffffffffffffffffffffffffffffffffffffffffffef6500000000000087 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffef6500000000000087ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffa1b00000000000eb8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8b00000000000074ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffdf00a4ffffffffffffffffffffffffffffff +ffffffff9b0065f6ffffe70011ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0900bbffff +ff6e00a6ffffffffffffffffffffffffffffffffffffffffffffffb70b000000000020db +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffb70b000000000020dbffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8b0000000000006effffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff9812000000000067edffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffff7190012ffffffffffffffffffffffffffffff +ffffffffffff430000100e0000b0ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0000007 +0d050040ffffffffffffffffffffffffffffffffffffffffffffff7000000000000087ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffef6500000000000087ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff9812000000000067edffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffa1d000000000005e2ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffb383becffffffffffffffffffffffffffff +ffffffffffffffffd445342e84ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88 +2f3340d2ffffffffffffffffffffffffffffffffffffffffffffdf24000000000020dbff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffb70b000000000020dbffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffa1b000000000005e4ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffff04800000000000fb7ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7700000000000088ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffef6500000000000088ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff8b00000000000074ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f000000000000 +70ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffde24000000000023ddffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffb609000000000021dbffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff8e00000000000065ec +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd25000000 +000022daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7700000000000048f2ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffee6300000000000088ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd230000000000 +03e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81b00 +0000000007e4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffdc220000000000119cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffb60a000000000021dbffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff249000000 +00000eb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +8c00000000000073ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffb70d000000000049f5ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffee6300000000000088ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9000 +00000000006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff9a13000000000065ecffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffee630000000000119cffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffb60a000000000021dbffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +dd25000000000022dcffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc1e000000000003e1ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffb60a000000000049f5ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ec6300000000000088ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff81b00000000000db6ffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff14900000000000eb6ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffee6300000000000090ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +e304000000000021dbffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff8c0000000000006fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff900000000000006fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffb50a000000000021dcffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +750000000000008affffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff9b13000000000022daffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffdd25000000000022daffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffec620000000000008affffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde +23000000000021dcffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffb1d000000000008e2ffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffff71d000000000008e2ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe204000000000021dcffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff75 +0000000000008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff8c00000000000073ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff8c00000000000073ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff750000000000008affffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde23 +0000000000119bffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff9b13000000000064ecffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9b13000000000064ecffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffde23000000000021dcffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7500 +00000000004af5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffc20000000000004e2ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc20000000000003dfffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff750000000000008cffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde2300 +00000000119dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff14a00000000000073ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffff14a00000000000eb5ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffdd210000000000139bffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff740000 +000000004af5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff9200000000000064ebffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff920000000000006dffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff740000000000004cf7ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd210000 +000000139fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffde24000000000002e0ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffde26000000000021d9 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffdb200000000000139effffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff74000000 +0000004cf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff34c00000000000db3ffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91e0000000000 +06e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffb40c00000000004cf7ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd21000000 +0000139effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff920000000000006d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f000000 +00000070ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffec610000000000139effffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7400000000 +00004cf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde2600000000 +0021dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c14 +000000000063ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffb30800000000004cf7ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd2100000000 +00139effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91e0000 +0000000cb3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fd21000000000002deffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffec6100000000000093ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff720000000000 +004cf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f +0000000000006affffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff24c00000000000db3ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffb308000000000024ddffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb210000000000 +139effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff9c14000000000063ebffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff930000000000006cffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff6c0000000000008cffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73000000000000 +4cf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffc1f000000000003e0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffde27000000000021d8ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffdb20000000000024dfffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb20000000000013 +9effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff8f00000000000070ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff91e000000000006e1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff730000000000008cffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff730000000000004d +f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff9100000000000063ebffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff8f00000000000070ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffdb20000000000026e0ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdb20000000000014a0 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe026000000000003dfffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff9e15000000000061eaffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff710000000000004cf5ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff6f0000000000004df8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff44d0000000000006effffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffe22000000000001ddffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffdb20000000000014a0ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffeb61000000000014a0ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff940000000000006cffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff34d00000000000cb2ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff6f0000000000004df8ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffb20700000000004df8ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffe02600000000001fd9ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff940000000000006bffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeb61000000000014a0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffeb5f000000000015a0ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff44d00000000000bb2ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffe02700000000001fd9ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffb00700000000004ff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffb007000000000020fdffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff970000000000006bffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffa1f00000000000bb1ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffea5e000000000017a1ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffea5e0000000000008fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9f1700000000001ed6ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9200000000000067 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffb007000000000021fdffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffb007000000000025e0ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffd21000000000005deff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f1700000000 +0060e8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffe85e0000000000008fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffea5e0000000000008fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92000000000000 +6dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd210000 +00000002deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffde02000000000025e0ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffb007000000000025e0ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f17000000 +000060e8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92 +0000000000006dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff700000000000008fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffea5e0000000000008fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2200 +0000000002deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff940000000000006bffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffda1f000000000025e0ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffb007000000000025e0ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3 +4e0000000000006effffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffe12700000000001ed8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff6e00000000000093ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffea5c00000000000091ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff960000000000005ee8ffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffff650000000000009afffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffd91d000000000015a1ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffaf06000000000026e2ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffe228000000000000dcffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff9800000000000067ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff6e00000000000050f9ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffea5c00000000000091ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff65000000000000aafffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffa01700000000005fe8ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffd71c000000000015a3ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffaf06000000000026e2ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff9600000000000069ffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffd21000000000002deffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffb009000000000050f9ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffea5c00000000000091ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffe22a00000000001dd7ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff930000000000006cffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffe4a8aeb5ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffea5c000000000015a3ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffaf06000000000026e2ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffa21000000000009afffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff940000000000006bffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffe4a8aeb5ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffe3a7b2a622161f00000000181a1064b8acb4ffffffffffffffffffffffffff +ffffffffffffad06000000000052f9ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe85c00000000000091ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff9300000000000068ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe22800000000001dd7ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffb4acb86411191f00000000181a1064b8 +acb4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffe3b164101f000000000000000000000000000000000000181922a3b6ffffffffffffff +ffffffffffe85c00000000000097ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffad06000000000026e2ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffa11800000000001dd5ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff55100000000000aaeffffffffffff +ffffffffffffffffffffffffffffffffb6a3221918000000000000000000000000000000 +000000181922a3b6ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3b1 +6315000000000000000000000000000000000000000000000000000000001622a3b6ffff +ffffffffffad06000000000028e3ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff6800000000000092ffffffffffffffffffff +ffffffffffffffffff8c00060000000012a8fffffffffff6007bffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff66f1ffffffffffffffffffff +fffffc0586ffffffffffffffff7b00f6ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffc1a06020000000055e4fffffffc0586ffffffffffffffffffffffffffffff +fffffffffffffffc0586fffffffffffffff6007bffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe23000000000004ddffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9900000000000066ffffffff +ffffffffffffffffffffffffffb6a3221600000000000000000000000000000000000000 +0000000000000000001622a3b6ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe95c1500 +000000000000000000000000000000000000000000000000000000000000000000000016 +21aaffffff6800000000000092ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffd71c000000000028e3ffffffffffffffffffff +ffffffffffffffffffff790047454141490a0011d1fffffffc349dffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8800feffffffffffffffffff +ffffffff0074ffffffffffffffff9d34fcffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00154f4141443b0000d5ffffff0074ffffffffffffffffffffffffffff +ffffffffffffffffff0074fffffffffffffffc349dffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff940000000000006bffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffa21800000000005de7ff +ffffffffffffffffffffffaa211600000000000000000000000000000000000000000000 +00000000000000000000000000001621aaffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe962000000 +000000000000000000001c585050479bf0e7e7eade594d50534b00000000000000000000 +00000023a125000000000028e3ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff6d00000000000092ffffffffffffffffffffff +ffffffffffffffffffffff7a00ffffffffffff910002ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffffff +ffffffffff007affffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0089ffffffffffea133bffffff0079ffffffffffffffffffffffffff +ffffffffffffffffffff0079ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffa21800000000005de7ffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe23000000000001 +dcffffffffffffffffffab1f000000000000000000000000001c585050479bf0e7e7eade +594d50534b000000000000000000000000001fabffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe66100000000 +00000000000000439df0e1ffffffffffffffffffffffffffffffffe8e7de611a00000000 +000000000000000000000092ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa1d9ffffffffffffffffffffffd71c00000000002ae4ffffffffffffffffffffff +ffffffffffffffffffffffff7900ffffffffffffff9a0093ffffff9cd5ffffffb1aaa4e0 +ffffffffff9ddfffaea9b1ffffffffffffffb1aaaab1ffffffba4f00aaacffffffffdfa6 +a6dfffffffff0088ffb0a9b1ffffffffd59cffffff9fe3ffb0a9b1ffffffffffffffb1a9 +aeffe39effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0079ffffffffffff8000ffffff0079ffffffffffb1a9b1ffffffff +ffffffdfa6a6dfffffffff0079ffffffffa49dffff9cd5ffffd5a6ffe1a4a6dfffffffff +ffffb1a9aeffe39effffffffffffffffffffffffffffffffffffffff25000000000001dc +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9500000000 +00006affffffffffffa9200000000000000000000000439df0e1ffffffffffffffffffff +ffffffffffffe8e7de611a0000000000000000000020a9ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffae0600000000 +0000000000449cf1ffffffffffffffffffffffffffffffffffffffffffffffffffd8631b +0000000000000000000038faffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd10043ffffffffffffffffffff6d00000000000052f5ffffffffffffffffffffff +ffffffffffffffffffffffffff7900ffffffffffffffff193ffffffc006affd107000000 +0012d1fffffc00796e00000008d2ffffffd207000000000fd7ff0000000000f1ffff6300 +00000061ffffff0045210000000dd2ffff6a00fcfffb00361e0000000dd2ffffffd20800 +0000624800fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007affffffffffff7700ffffff0079ffffffd20800000008d2ff +ffffff630000000061ffffff0079ffffff590079fffe006affff6c00560000000063ffff +ffd208000000624800fbfffffffffffffffffffffffffffffffffffffff4530000000000 +006affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff970000 +0000000068ffffffea5c0000000000000000001f4f9bf1ffffffffffffffffffffffffff +ffffffffffffffffffffffffd8631b0000000000000000005ceaffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa200000000000 +000000449cf1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffd8631b000000000000000f72ebffffffffffffffffffffffffffffffffffffffffffff +ffffffff4e000094ffffffffffffffd71c000000000018a4ffffffffffffffffffffffff +ffffffffffffffffffffffffffff7900ffffffffffffffff7d00ffffff007aff3c00a6ef +f2930033ffffff0000129ef8a20400d4ffc70011e3eaf29a0001fffb6c00e1e5ffff5900 +50e3e452008affff00001fe3f59a0042ffff7900ffffff00001fe3f59a0042ffffd40004 +a2f89f0d0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0084ffffffffffad088effffff0079ffffd70004a2f8a20400 +d7ffff590050e3e452008affff0079ffff5c0092ffffff0079ffff7e000092f4e72300cf +ffd40004a2f89f0d0000ffffffffffffffffffffffffffffffffffffffffffff99000000 +00000068ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4 +2a000000000023ae6b00000000000000001b63d8ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffd8631b000000000000000060e7ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd519000000000000 +0018a2f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffdc5d00000000000000006affffffffffffffffffffffffffffffffffffffff +ffffffffd500000008dbffffffffff6d00000000000053f9ffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7900ffffffffffffffff7900ffffff007dff008aff +ffffff9540f9ffff0000f6fffffff80071ff9d38f4ffffffff7300ffff7e00ffffffff00 +66ffffffff1500ffff0023ffffffff6700ffff7900ffffff0023ffffffff6700ffff7100 +f8fffffff90000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00000b00000003003bffffffff0079ffff4000f8fffffff8 +003fffff0066ffffffff1500ffff0082ff5d0092ffffffff0079ffff7e00a0fffffff900 +75ff7000f8fffffff90000ffffffffffffffffffffffffffffffffffffffffffffffe42a +00000000001bd5ffffffffffffffffff5554ffffffffffffffffffffffffffffffffffff +fff5530000000000000000000000000057dbffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffdb5700000000000000006affffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffac08000000000000 +189effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff2c3d000000000000005ce6ffffffffffffffffffffffffffffffffff +ffffffffff4f000000004dffffffd81a000000000018a5ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7900ffffffffffffffff7a00ffffff007dff1b00 +68aee2ffffffffffff0066ffffffffff5e00fffffffffffffff74a00ffff7900ffffff8f +00f0fffffffff8d5ffff0081ffffffff7b00ffff7900ffffff0081ffffffff7b00ffff00 +5effffffffff6600ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff001b534444444f1b005fffffff0079ffff0063ffffffff +ff6300ff9400f0fffffffff8d5ffff00877a00a2ffffffffff0079ffff7a00ffffffffff +007eff005effffffffff6600ffffffffffffffffffffffffffffffffffffffffffffffff +f753000000000008acffffffffffffffd50000d3ffffffffffffffffffffffffffffffff +ffffffff9d0000000000000000000055e1ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffe1550000000000000068ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6400000000000018 +9effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffcffe35500000000000000daffffffffffffffffffffffffffffff +ffffffffff910000000000009cff6c00000000000053faffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7900ffffffffffffffff7800ffffff0079fff9 +160000000d59e4ffffff007bffffffffff7a00ffffffb5530001000000ffff7900ffffff +7700ffffffffffffffffff0079ffffffff7900ffff7900ffffff0079ffffffff7900ffff +007affffffffff7b00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0088ffffffffffff6400cfffff0079ffff007bffffff +ffff7b00ff7d00ffffffffffffffffff000018006cffffffffff0079ffff7900ffffffff +ff007fff007affffffffff7b00ffffffffffffffffffffffffffffffffffffffffffffff +ffffff9b00000000000066ffffffffffd90100004effffffffffffffffffffffffffffff +ffffffffffff770000000000000055e1ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffe1550000000000001ad4 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe65c0000000000189e +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffe155000000000009acffffffffffffffffffffffffff +ffffffffffff120000000000000a22000000000018a5ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7900ffffffffffffffff001bffffff0079ff +ffffdc5c44000000d3ffff007dffffffffff7b00ffff5a00084a3cad7500ffff7900ffff +ff7900ffffffffffffffffff0079ffffffff7900ffff7900ffffff0079ffffffff7900ff +ff007bffffffffff7d00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0079fffffffffffff50074ffff0079ffff007bffff +ffffff7d00ff7f00ffffffffffffffffff0021ff6f00d0ffffffff0079ffff7900ffffff +ffff007eff007bffffffffff7d00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffa31900000000001ad5ffffff4e00000000d4ffffffffffffffffffffffffff +ffffffffffffde10000000000058e1ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1550000000000 +02daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd700000000000094ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffe729000000000062ffffffffffffffffffffff +ffffffffffff950000000000000000000000000054faffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7900ffffffffffffffd7007dffffff007a +ff98dbfffffff6a80075ffff004cffffffffff3f11ff900097ffffffff8600ffff7900ff +ffff7a00d9ffffffff8707ffff0079ffffffff7900ffff7900ffffff0079ffffffff7900 +ffff1442ffffffffff4c00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0079ffffffffffffff0076ffff0079ffff1542ff +ffffffff4700ff7f00d9ffffffff8707ffff0081fffa1300ffffffff0079ffff7900ffff +ffffff007dff1442ffffffffff4c00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff24000000000008aeff6b00000000004cffffffffffffffffffffffff +ffffffffffffda03000000000098ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7290000 +000003daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdc04000000002be5ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff754000000000069ffffffffffffffffff +ffffffffffffff12000000000000000000000018a5ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7a00ffffffffffffdc0015f6ffffff00 +7cff0400ffffffffe90078ffff0000d9ffffffd500aaff7500ffffffffdb0000ffff7a00 +ffffffea0044ffffffdb0054ffff0079ffffffff7900ffff7900ffffff0079ffffffff79 +00ffff7b00d6ffffffd80000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0082ffffffffffff9800a9ffff0079ffff7b00 +d6ffffffd6005fffeb0044ffffffdb0054ffff0079ffffae005fffffff0079ffff7900ff +ffffffff0079ff7b00d6ffffffd80000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff960000000000005b02000000000000d4ffffffffffffffffffff +ffffffffffffab09000000002be5ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff754 +0000000009abffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff69000000000023fcff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff9d00000000001ad4ffffffffffff +ffffffffffffff97000000000000000000000064ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7a00acafababb3600000acffffffff +0079ffac0014a2b0a20012f4ffff00000060bb60001affffa60015a2b555000a00ffff78 +0062b2ffff900054b5a60000e8ffff0078ffffffff7800ffff7800ffffff0078ffffffff +7800fffff3150060bb5d000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff004cbdaaababb25b001dffffff0078fffff3 +150060bb600016f5ffff900054b5a60000e8ffff0078ffffff96008bffff0078ffff7800 +ffffffffff0078fff3150060bb5d000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa3190000000000000000000000004cffffffffffffffffff +ffffffffffff62000000000023fcffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff9d000000000062ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff64000000000096ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9a000000000002d8ffffffff +ffffffffffffffd906000000000000000000000079ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff74000000000000004dddffffffff +fa006dffff9f0300000044f5ffffff00646400000047f4ffffff9f03000000adb700c8ff +f3180000f1ffff9e00000018dffffffa006dffffffff6d00faff6d00fafffa006dffffff +ff6d00fbfffffe49000000a67800ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff9000000000000000654f1fffffa006dffff +fff54700000047f5ffffffff9e00000018dffffffa006dffffffff1600d1ff006dffff6d +00fafffffffa006efffffe49000000a67800ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff24000000000000000000000000d4ffffffffffffff +ffffffffffff64000000000096ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff9a000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff62000000000096ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffa31b0000000000d7ffff +ffffffffffffffff4b00000000000000000000000000d1ffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffff4dfe9e9e9e9e8e8ffffffffff +ffffd6f2ffffffffe3e8e8ffffffffff0084ffe7e6e8ffffffffffffffe3e3ffffffd6eb +fffffce1e0ffffffffffe3e3fdffffffffd6f2fffffffff2d6fffff2d6ffffffd6f2ffff +fffff2d6ffff9ce3ffe8e6eaff8300ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffdfe7e9e9e9e9e3ffffffffffffd6f2ff +ffffffffe8e6e8ffffffffffffffffe3e3fdffffffffd6f2fffffffff9d0ecffd6f2ffff +f2d6ffffffffffd6f5ff9ce3ffe8e6eaff8300ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffa000000000000000000000004cffffffffffff +ffffffffffff62000000000096ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffa31b0000000062ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd4000000002ce6ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28000000004fff +ffffffffffffffffd400000000000000000000000000000dffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0079ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff6003fffffffffdf005effffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff7003fffffffffdf005effffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffa7000000000000000000000000d4ffffffff +ffffffffffffd4000000002ce6ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff2800000000d4ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7050000002bfdffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2800000000 +65ffffffffffffffff4c00000000000000000000000000000065ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0078ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff5f0012a0afa00000e9ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5f0012a0afa00000e9ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd6090000000000000000000000004cffffff +ffffffffffffd7050000002bfdffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffc2b00000005d7ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd60300000000f4ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc290000 +000065ffffffffffffd20000000000000000000000000000000000d1ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc006fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff9b040000004adbffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff9b040000004adbffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0b0000000000000000000000000000d4ff +ffffffffffffd60300000000f4ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff40000000003d6ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7000000000096ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28 +0000000061ffffffffff0b000000000000000000000000000000000000f6ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffd7f2ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffe5eae9ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffe5eae9ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff670000000000000000000000000000004c +ffffffffffffd7000000000096ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff960000000000d7ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff4d000000009affff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b20000000000d3ffffff9300000000000000000000000000000000001c47bbffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff9100000000000000000000000000000000 +00d4ffffffffff4d000000009affffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff9a000000004dffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff64000000009effff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff9a0000000002d7ffff10000000000000000000001f5c515de1ede4ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffcb00000000000000000000000000000000 +00004cffffffff64000000009effffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff9e0000000064ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f000000002bffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff9a000000004bff84000000001f5c515de1ede4ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffedcf5c5a1f0000000000000000000000 +00000000d4ffff8f000000002bffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff2b000000008fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff100000002bfcff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9d00000000d27651e2eee5ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffe5f4a04f510000000000 +00000000004cffff100000002bfcffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc2b00000010ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9300000000f5ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7000000053ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaf3a04f +51000000000000eca600000000f5ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffff50000000093ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff120000006cff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffef00000000d3ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffeaebe25e5b143f1c0000006cffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff6c00000012ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300000000ef +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff6c0000004dffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff3b00000000efffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffef0000000063ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2000000006b +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffef00000000d3ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffda000000006bffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff6b00000000d2ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b00000000 +efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff6d0000004bffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff4b00000000efffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffef000000004bffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd300000000 +6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffee00000000d3ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffd3000000006dffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6d00000000d3 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b000000 +00eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff6d0000004bffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff4b00000000eeffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee00000000 +4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf000000 +006dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff000000000d0ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffcf000000006dffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6d0000 +0000cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c0000 +0000f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff6d00000079ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7c00000000f0ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000 +0000007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f00 +00006affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff400000010ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff4f0000006affffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +6a0000004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +000000b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00000000d3ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000b2ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffb200000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96 +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff6c0000007affffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff9600000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000000096ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +4d00000069ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff8100000011ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff4d00000069ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff690000004dffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00000000b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffef0000000095ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00000000b2ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffb200000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffd400000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff2d0000004dffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffd400000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00000000d4ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff790000006affffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8100000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff790000006affffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff6a00000079ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0d000000b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb20000000091 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0d000000b4ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffb40000000dffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +0083ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f3ee2ffffffff +ffffffffffffffffffffffffffffffffffffffd200000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00000000d2ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffd20000002dffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2d00 +00004dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7800005ae2ff +ffffffffffffffffffffffffffffffffffffffff780000002dffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff2d00000078ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7800000085fffffffffffffb14000000000000000001f6ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5ef1fffff70076ffffffffffffffffffffffffffffffffffffffffffffffffffffff85 +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000 +5ae2ffffffffffffffffffffffffffffffffffffff7f00000085ffffffffffffffffffff +fffffffb140000000000004bdefffffffb0083ffffffffffffffffffffffffffffffffff +fffffffffffb0083ffffffffffffffffffffffffffffffffffffffffffffffffff8300fb +ffffffffffffffffffffffffffff850000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000007fffffffffffffff001b5c4d4e4e4e4e4950fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff8500fefffffd3fa3ffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +0000005ae2ffffffffffffffffffffffffffffffffff800000007fffffffffffffffffff +ffffffffff001b5c4d4d50470000d1ffffff0075ffffffffffffffffffffffffffffffff +ffffffffffffff0075ffffffffffffffffffffffffffffffffffffffffffffffffff7500 +ffffffffffffffffffffffffffffff7f00000080ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000007fffffffffffffff0088ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff8000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +00000000000058e1ffffffffffffffffffffffffffffff0b0000007fffffffffffffffff +ffffffffffff0088fffffffffff31935ffffff0079ffffffffffffffffffffffffffffff +ffffffffffffffff0079ffffffffffffffffffffffffffffffffffffffffffffffffff7a +00ffffffffffffffffffffffffffffff7f0000000bffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff830000007bffffffffffffff0079ffffffffffffffffffcd82d0ff +ffffffff93cfffffffffa79fa7ffffffffffffffffa79fa7ffffffffcf92ffffffffff92 +d1ffb049009fa2ffff92cfffff95dfffa69fa7ffffffffffffffa79fa4ffde94ffffffff +ffff7b00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00000000000000000058e1ffffffffffffffffffffffffff000000007bffffffffffffff +ffffffffffffff0079ffffffffffff7f00ffffff0079ffffffffd79b9bd7ffffffffffff +ffd79b9bd7ffffffff0079ffffffff9a96ffffffffd79b9bd7ffffffffffffffa79fa6ff +8800ffffffffffffffffffffffffffffff7b00000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff4d000000b2ffffffffffffff007affffffffffffffffffea0400 +ffffffff4d00dcffffca0000000000caffffffffcd0100000001caffff6b00fcfffffffc +006fff0000000000f8ff006bfffc00321600000005ceffffffcd01000000584300fcffff +ffffffb200000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88 +00000000000000000000000058e1ffffffffffffffffffffff00000000b2ffffffffffff +ffffffffffffffff007affffffffffff7500ffffff0079ffffff5a000000005affffffff +ff5a0000000059ffffff0079ffffff510080ffffff580000000058ffffffffca00000000 +1c4100ffffffffffffffffffffffffffffffb200000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00000000ffffffffffffffff0083ffffffffffffffffffffb2 +0059ffff8a0099ffffcc001cedf4ed1c00d0ffffce000dabffae0900ffff7900ffffffff +ff007afffd7000eaebffff0079ffff000028ecfda3003dffffce000dabffa9140000ffff +ffffffffff0000000078ffd196a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4 +a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4b6 +52000000000000000000000000000058e1ffffffffffffffff9100000000ffffffffffff +ffffffffffffffffff0083ffffffffffa30797ffffff0079ffff54005bebeb5b0054ffff +ff52005bebec5b0083ffff0079ffff540099ffffff4f0099fafa990051ffffce001fedfa +ab190000ffffffffffffffffffffffffffffffff0000000091ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00000000ffffffffffffffff0000020000000000007bffff +ff6700dde90023ffffff6a1cffffffffff2237ffff6e00faffffffb20083ff7900ffffff +ffff0079ffff7d00ffffffff0079ffff0029ffffffff6a00ffff6e00fafffffffb0000ff +ffffffffffff000000007fff700000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000058e0ffffffffffff7d00000000ffffffffff +ffffffffffffffffffff00000200000000003affffffff0079ffcc006dffffffff6d00cc +ffff006cffffffff1c00ffff0084ff540099fffffffc00b1ffffffffb200cbff6e00f7ff +fffffb0000ffffffffffffffffffffffffffffffff000000007dffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00000000ffffffffffffffff00205e4f4f4f4f503ea7ff +fffffa1e043317ffffffff004cbba2a1a2ba4e00ffff0061ffffffffffe1f2ff7900ffff +ffffff0079ffff7900ffffffff0079ffff0081ffffffff7b00ffff0061ffffffffff6800 +ffffffffffffff000000007fff7f00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000055ffffffffff7b00000000ffffffff +ffffffffffffffffffffff00205e4f4f4f59230058ffffff0079ff7400f6fffffffff600 +74ff8c00f3fffffffffbdcffff00847300a8ffffffff8d00aba9a1a1a9ad007aff0061ff +ffffffff6800ffffffffffffffffffffffffffffffff000000007bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000ffffffffffffffff0088ffffffffffffffff +ffffffffff0000bfffffffff000000000000000000ffff007affffffffffffffff7900ff +ffffffff0079ffff7900ffffffff0079ffff0079ffffffff7900ffff007affffffffff7b +00ffffffffffffff000000007bff7e000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000056d2ffffffffffb200000000ffffff +ffffffffffffffffffffffff0088ffffffffffff6900cbffff0079ff7900ffffffffffff +0079ff7700ffffffffffffffffff00001d0065ffffffff7c00000000000000007bff007a +ffffffffff7b00ffffffffffffffffffffffffffffffff00000000b2ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff2e000000d1ffffffffffffff0079ffffffffffffff +ffffffffffd30000daffffffff0075ffefefeff0efe9ffff007dffffffffffffffff7900 +ffffffffff0079ffff7900ffffffff0079ffff0079ffffffff7900ffff007bffffffffff +7d00ffffffffffffd100000000b2ff750000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000005fe7ffffffffffffffff00000000d1ff +ffffffffffffffffffffffffff0079fffffffffffff80074ffff0079ff7500ffffffffff +ff0079ff7900ffffffffffffffffff0027ff7300caffffff7700f2f6efefeff0e9ffff00 +7bffffffffff7d00ffffffffffffffffffffffffffffffd100000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff8500000078ffffffffffffff0079ffffffffffff +ffffffffffff00242700d2ffffff1a44ffffffffffffffffff0044ffffffffff0083ff79 +00ffffffffff007affff7900ffffffff0079ffff0079ffffffff7900ffff193fffffffff +ff4900ffffffffffff7800000000fffff8e7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +f0f0f0f0ff77000000000000000000000000005fe9ffffffffffffffffffff0000000078 +ffffffffffffffffffffffffffff0079ffffffffffffff0076ffff0079ffae00d4ffffff +ffd5007bff7b00d5ffffffff8001ffff0081fffe1900ffffffae00dbffffffffffffffff +193fffffffffff4900ffffffffffffffffffffffffffffff7800000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000007fffffffffffffff0083ffffffffff +ffffffffffff5300ffff003cffffff7c00cfffffffff4835ffff6500ceffffff5600e7ff +7b00d5ffffff5d007effff7a00ffffffff0079ffff0079ffffffff7900ffff7c00cfffff +ffd10000ffffffffffff7f00000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff8300000000000000000000005fe9ffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffff0083ffffffffffff9100aeffff0079ffff0040ffff +ffff4200eeffee003fffffffd4005bffff0079ffffb20056ffffff0040ffffffffca00b4 +ff7c00cfffffffd30000ffffffffffffffffffffffffffffff7f00000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000007fffffffffffffff0046b19f9f9f +9f9f9f92d2ff86009affff9c0087fffff71c0056aa950800a6fffff91a0096ab520064ff +ffed00009ba94510007cffff7b0059a7ffff0078ffff0078ffffffff7800fffff71c0056 +af53000000ffffffffffff7f00000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000000000000000005fe9ffffffffffffffffffffffffffff6e0000 +007fffffffffffffffffffffffffffff0046b19f9f9fa6510024ffffff0078ffff970008 +9898080099ffffff990049aa9a0000ecffff0078ffffff9e0087ffff97000995aa560018 +fffff71c0056af55000000ffffffffffffffffffffffffffffff7f0000006effffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7b00000083fffffffffffffa0000000000 +00000000006fdd001effffffff1e00c7fffff9510000000ca8fffffffff84e00000094ff +ffffffa70f00001af40070fffff7210000f7ff006ffffb006fffffffff6f00fbffffff54 +000000b07c00ffffffffffff8300000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000000000000060e9ffffffffffffffffffffffffffffffff8000 +000083fffffffffffffffffffffffffffa000000000000000d60f4fffffb006fffffffa8 +0c00000ca8ffffffffffa607000020e7fffffb006fffffffff1e00c7ffffa80c00000051 +f8fffffff951000000696000fbffffffffffffffffffffffffffff8300000080ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffb40000004bffffffffffffffe8eff1f1 +f1f1f1f1f1e7fef6d9fdfffffffffdd9edfffffffff0f0ebfffffffffffffffff0edeeff +ffffffffffffebebffffe0f6ffffffffe9e8ffffdef6ffffdff6fffffffff6deffff92dd +fff1edf0ff8000ffffffffffff4b0000002effffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f000000000060e9ffffffffffffffffffffffffffffffffffff7b +0000004bffffffffffffffffffffffffffffe8eff1f1f1f1ebffffffffffffdff6ffffff +ffffebebffffffffffffffffffebebffffffffffdff6fffffffffdd9edffffffffebf0f0 +fffffffffffffff0edefffffe0ffffffffffffffffffffffffffffff4b0000007bffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800 +3affffffffd60065ffffffffffff0000000085ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7e00000060e9ffffffffffffffffffffffffffffffffffffffff +b400000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000b4ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +65000a95a3940000ecffffffffffff000000007effffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff6f0061e9ffffffffffffffffffffffffffffffffffffffffff +ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00000000d1ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffa50d00000053e2ffffffffffffd1000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffb5d5ffffffffffffffffffffffffffffffffffffffffffff +ffffff00000000d1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd100000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff6f00000079ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffedf1f1ffffffffffffffff7d00000000f0ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff6f00000079ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff790000006f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff810000000fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff4b0000002fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff810000000fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0f000000 +81ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000d0ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000086ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff9b9b9d9c9c9d95d5ffffffffff8dccffff +ffffffffffffffffffffffffffffffffffffffffff8dccffffffffffffffff8acbffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff000000000d0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0000000 +00f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f00000079ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd100000000f0ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc000000000000000054fffffffc006bff +fffffffffffffffffffffffffffffffffffffffffffc006bfffffffffffffff30060ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff2f00000079ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff790000 +002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff870000000fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff780000002bffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0071fff2f2f5eb5e0081ffffff0079 +ffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffffffffe3f9ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff870000000fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0f00 +000087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff300000000 +d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0c000000b9ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007dffffffffffff6700ffffff00 +79ffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff300000000d0ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd000 +000000f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +0078ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffff7d00ffffff +0079ffffffff9506000695ffffffffffdb47000047daffffff0079ffffffc7003ffffe00 +80ffff830dd246000047d8ffffffff95060000de9401fcffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000000078ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78 +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b00 +000010ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff8f0000006bffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0083ffffffffffff3b1bffff +ff0079ffffff4f00186318004fffffffc8000050510000d0ffff0079ffffcb0017f7ffff +0075ffff7a0000135d520000ffffff4f00186314000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff6b00000010ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +100000006bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3 +000000008effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0c000000b6ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0046ad9b9b9e950c25ffff +ffff0079ffff8400a0ffffffa00084ffff0020f5ffffe6002affff007cffcb001effffff +ff0079ffff7e0032ffffffab008bff8900a0ffffffa20000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffb3000000008effffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +8e00000000b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff300000000cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff8e00000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000001d5 +ffffff0079ffff0025ffffffffff2500ffd100b7ffffffff9d4effff0090ee0029ffffff +ffff0079ffff7b00fdffffffff0079ff371fffffffffff2e00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff300000000cffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0c00000030ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffb8000000008effffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0c00000070ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0073fff3f3f3fcb50f +00ffffff0079ffff007fffffffffff7f00ff7900ffffffffffffffffff003b0b00c6ffff +ffffff0079ffff7900ffffffffff007eff007dffffffffff7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffb8000000008effffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff8e00000000b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff300000000effffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff9100000000f3ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007dffffffffffff +be008bffff0079ffff0079ffffffffff7a00ff7f00ffffffffffffffffff0000a52e00ff +ffffffff0079ffff7900ffffffffff007fff0079ffffffffff7a00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff300000000effffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0e00000030ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffb8000000005bffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffd20100000071ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0079ffffffffff +ffff0078ffff0079ffff0073ffffffffff7600ff7d00ffffffffffce86ffff006effba00 +55ffffffff0079ffff7900ffffffffff007eff0073ffffffffff7700ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffb8000000005bffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff5b00000000b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff3400000000ceffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff4600000000f3ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007affffffff +ffffd7007dffff0079ffff5f00ffffffffff001effb4008dffffffff2e05ffff007bffff +6a00c8ffffff0079ffff7900ffffffffff007aff5f00ffffffffff0900ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff3400000000ceffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffce0000000034ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffff70000000047ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd00000000071ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082ffffff +ffffe43100efffff0079ffffaf0047e1ffe14700b3ffff2600d4ffff5700b3ffff0079ff +fffb2300d0ffff0079ffff7900ffffffffff0079ffaf0047e1ffdf4a0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffff70000000047ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff4700000000f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7100000000ceffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff4a00000000f2ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 +000000000099ffffff006fffffff9c00000000009cfffffffd1d000000005effffff006f +fffffff5002affff006fffff6f00ffffffffff006fffff9e00000000222e00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7100000000ceffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffce0000000071ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff20000000000caffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5a0000000073ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff605758 +5757574fa4f9ffffffff50acffffffffe8645364e8ffffffffffffa04f4fa7ffffffff50 +acffffffff9f3ec0ff4facffffac50ffffffffff50afffffffee64535fff9000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffff20000000000caffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffca0000000000f2ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff6f0000000008ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff590000000000f1ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffb0085ffffffffff3c19ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f0000000008ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff08000000006fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffc30000000005effffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff570000000000a2ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff18009dffffff5300b2ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc30000000005e +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5e0000000030fcffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff2f0000000059ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffcc0000000000a8ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffbf1200000000005dffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f000000 +0059ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff59000000002fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffb8000000000057ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffcd000000000033ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4525662e7ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb80000 +00000057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff570000000000b8ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffa70000000000ccffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffcd000000000032ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa5 +0000000000ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffcc0000000000a5ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffb50000000000cfffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffcd000000000032ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffa60000000000cfffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffce0000000000a6ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff59d9be00000000049bffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffd000000000002effffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa800000000049bffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffd00000000000a8ffffffca95ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff58000bff44000000000057ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5a000000000000b8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff35000000000057ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5a000000000035ffffffff000056ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5800000064ff3700000000004dda +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff58000000000000a6ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff3300000000004ddaffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff58000000000033ffffffff5500000058ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff590000000000caff650000000000 +00cdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5b000000000025b2ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff31000000000000cdffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5b000000000031ffffffffb9000000000058ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffda4d0000000000a5ffffffa6000000 +0000049affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffc80d000000000032ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffa50000000000049affffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc80d0000000000a5ffffffffffffa5000000000058ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcb000000000000a7fffffffffff235 +000000000059ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcf000000000000a5ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffa400000000000059ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffcf000000000000a4ffffffffffffffffa7000000000058ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000000a8ffffffffffffff +fc6700000000001598ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffd94f000000000027b2ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff23800000000001598ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffd94f000000000038f2ffffffffffffffffffffa8000000000057ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000000a5ffffffffffffff +ffffffa70000000000001398ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffd94f00000000000033ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff320000000000001394ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffd94f00000000000032ffffffffffffffffffffffffffa8000000000057ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000038f2ffffffffffffff +fffffffffff2370000000000001398ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd94f00000000000000a6ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffa6000000000000004cdaffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d94f00000000000000a6ffffffffffffffffffffffffffffffa8000000000057ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000033ffffffffffffffff +fffffffffffffffd63000000000000001196ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffd94f0000000000000025b1ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffb125000000000000004fd9ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 +4f0000000000000025b1ffffffffffffffffffffffffffffffffffa8000000000057ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000033ffffffffffffffff +ffffffffffffffffffffee6900000000000000128ad5ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffa8540000000000000027b0ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffb0270000000000000054a8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa854 +0000000000000027b0ffffffffffffffffffffffffffffffffffffffffa8000000000057 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcc000000000033ffffffffffffffff +fffffffffffffffffffffffffff33500000000000000001689d5ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffa850020000000000000000a4ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa400000000000000 +00025399d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffa8500200 +00000000000000a4ffffffffffffffffffffffffffffffffffffffffffffffa800000000 +0057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcd000000000035ffffffffffffffff +ffffffffffffffffffffffffffffffffb1260000000000000000001688d6ffffffffffff +ffffffffffffffffffffffffffffffa6500200000000000000000069ecffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6900000000 +0000000000001688d6ffffffffffffffffffffffffffffffffffffffffffa65002000000 +00000000000069ecffffffffffffffffffffffffffffffffffffffffffffffffffaa0000 +00000055ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57000000000035ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffb226000000000000000000000e06128f9a +98959effffffffd38f9897a050000a0a0000000000000000000069eeffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee6900 +000000000000000000000e06128f9a98959effffffffd38f9897a050000a0a0000000000 +000000000069eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa +000000000055ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff55000000000035ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffa9672c0000000000000000000000 +000000000b09080e000000000000000000000000000000005f71edffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ed715f000000000000000000000000000000000b09080e00000000000000000000000000 +0000005f71edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffaa000000000055ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff55000000000033ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffe9772900000000000000 +0000000000000000000000000000000000000000000059affdffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffdaf590000000000000000000000000000000000000000000000000000000000 +0059affdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffaa000000000055ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff55000000000068fdffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b259000000 +000000000000000000000000000000000000002a77ecf7ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffff7ec772a000000000000000000000000000000000000000000002a77 +ecf7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffaa000000000055ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff550000000000acffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f5 +ffaf5f6867702b0000000000616a676570edf9f1ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffff1f9ed70656767702b0000000000616a676570edf9f1ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffaa000000000055ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff560000000000a9ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffff2f8f8f7f6ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffff2f8f8f7f6ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa9000000000056ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff560000000000a9ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffa9000000000056ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff560000000000a9ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffa9000000000056ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff590000000000a9ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa9000000000056ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc50c0000000000a9ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffa9000000000056ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc9000000000000abffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffab000000000054ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc9000000000000aaffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffab000000000054ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc9000000000029b6ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffab000000000054ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc9000000000036ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffab000000000054ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc8000000000037ffffffffffffffffff +ffffffffffffff91909190909189cdffffffffffffffffffffffffffffffffff83c6ffff +fffffffffffffffffffffff7cdffffffc57fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff91909190909189cdffffffffffffffffffffffffffffffff +ff83c6fffffffffffffffffffffffffff7cdffffffc57fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffab000000000054ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc8000000000037ffffffffffffffffff +fffffffffffffffc000000000000000042d2fffffffffffffffffffffffffffffd006cff +ffffffffffffffffffffffff2f65ffffff6300f3ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffc000000000000000042d2ffffffffffffffffffffffffff +fffd006cffffffffffffffffffffffffff2f65ffffff6300f3ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab000000000054 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc8000000000037ffffffffffffffffff +ffffffffffffffffff0075fff9f9fcf26a0000cbffffffffffffffffffffffffffff0079 +ffffffffffffffffffffffffff0077fffffffdebffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0075fff9f9fcf26a0000cbffffffffffffffffffffff +ffffff0079ffffffffffffffffffffffffff0077fffffffdebffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac00000000 +0053ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc9000000000037ffffffffffffffffff +ffffffffffffffffffff007cffffffffffffb00037ffffffffffffffffffffffffffff00 +79ffffffffffffffffffffffffff0081fffffffffffffffffeffffffffffffffffffffff +fffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007cffffffffffffb00037ffffffffffffffffffff +ffffffff0079ffffffffffffffffffffffffff0081ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac0000 +00000053ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffff54000000000037ffffffffffffffffff +ffffffffffffffffffffff0079ffffffffffffff7200fcffffffd135000035d1ffffffff +0079ffffffd135000035d1ffff780000000074ff7c00fbfffb007f9c00000088ffffffff +ff89000000d48e00fbffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0079ffffffffffffff7200fcffffffd135000035 +d1ffffffff0079ffffffd135000035d1ffff780000000074ff7c00fbff7f05c93a00003d +cfffffffffd23b00004fff007fffffffffffffffffffffffffffffffffffffffffffffac +000000000053ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff +ffffffffffffffffffffffffffffffffffffffff53000000000037ffffffffffffffffff +ffffffffffffffffffffffff0079fffffffffffffff70086ffffc0001969691900c0ffff +ff0079ffffc0001969691900c0ffb758002f62b1ff7600ffffff000000596d25007fffff +ff460022721f000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0079fffffffffffffff70086ffffc000196969 +1900c0ffffff0079ffffc0001969691900c0ffb758002f62b1ff7600ffff7a00001d6c5e +0000fcffffc000005e5b0000007affffffffffffffffffffffffffffffffffffffffffff +ffac000000000053ffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffff +ffffffffffffffffffffffffffffffffffffffff53000000000036ffffffffffffffffff +ffffffffffffffffffffffffff0079ffffffffffffffff0078ffff002bffffffff2e00fc +ffff0079ffff002bffffffff2e00ffffff0087ffffff7900ffffff0000afffffff2a00ff +ff8600a8ffffffab0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0079ffffffffffffffff0078ffff002bffff +ffff2e00fcffff0079ffff002bffffffff2e00ffffff0087ffffff7900ffff7e0039ffff +ffb20088ffff0024fbfffff934007fffffffffffffffffffffffffffffffffffffffffff +ffffffac000000000053ffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffff +ffffffffffffffffffffffffffffffffffffffff5300000000006efdffffffffffffffff +ffffffffffffffffffffffffffff0079ffffffffffffffff0079ffc400ffffffffffff00 +88ffff0079ffc400ffffffffffff0088ffff0079ffffff7900ffffff0070ffffffff7f00 +ffff3226ffffffffff3200ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0079ffffffffffffffff0079ffc400ffff +ffffffff0088ffff0079ffc400ffffffffffff0088ffff0079ffffff7900ffff7b00ffff +ffffff0078ffc600bdffffffffc2007dffffffffffffffffffffffffffffffffffffffff +ffffffffffac000000000053ffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffff +ffffffffffffffffffffffffffffffffffffffff510000000000b0ffffffffffffffffff +ffffffffffffffffffffffffffffff0079ffffffffffffffff0079ff7800000000000000 +0072ffff0079ff78000000000000000072ffff0079ffffff7900ffffff007affffffff79 +00ffff007cffffffffff7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0079ffffffffffffffff0079ff780000 +00000000000072ffff0079ff78000000000000000072ffff0079ffffff7900ffff7900ff +ffffffff0079ff7400ffffffffffff007affffffffffffffffffffffffffffffffffffff +ffffffffffffffae000000000051ffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff +ffffffffffffffffffffffffffffffffffffffff510000000000aeffffffffffffffffff +ffffffffffffffffffffffffffffffff0079ffffffffffffffca007fff7c006b67636363 +645ab7ffff0079ff7c006b67636363645ab7ffff0079ffffff7900ffffff0079ffffffff +7900ffff0079ffffffffff7a00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0079ffffffffffffffca007fff7c00 +6b67636363645ab7ffff0079ff7c006b67636363645ab7ffff0079ffffff7900ffff7900 +ffffffffff0079ff7800ffffffffffff0079ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffae000000000051ffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f +ffffffffffffffffffffffffffffffffffffffff510000000000aeffffffffffffffffff +ffffffffffffffffffffffffffffffffff0079ffffffffffffff7200f4ff7e00ffffffff +ffffffffffff0079ff7e00ffffffffffffffffffff0079ffffff7900ffffff0079ffffff +ff7900ffff0072ffffffffff7600ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0079ffffffffffffff7200f4ff7e +00ffffffffffffffffffff0079ff7e00ffffffffffffffffffff0079ffffff7900ffff79 +00ffffffffff0079ff7d00ffffffffffff007affffffffffffffffffffffffffffffffff +ffffffffffffffffffffffae000000000051ffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +7fffffffffffffffffffffffffffffffffffffff520000000000aeffffffffffffffffff +ffffffffffffffffffffffffffffffffffff007bffffffffffffca002ffffff30086ffff +ffffff82c9ffff0079fff30086ffffffffff82c9ffff007fffffff7900ffffff0079ffff +ffff7900ffff6100ffffffffff0500ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff007bffffffffffffca002fffff +f30086ffffffffff82c9ffff0079fff30086ffffffffff82c9ffff007fffffff7900ffff +7900ffffffffff0079fff30086ffffffff8e007effffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffae000000000051ffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +007fffffffffffffff3e41ffffffffffffffffd3470000000000aeffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007effffffffff900000f7ffffff2a0092 +ffffd93400e1ffff0079ffff2a0092ffffd93400e1ffff0046ffffff7900ffffff0079ff +ffffff7900ffffb4003ed9ffd73f0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007effffffffff900000f7ff +ffff2a0092ffffd93400e1ffff0079ffff2a0092ffffd93400e1ffff0046ffffff7900ff +ff7900ffffffffff0079ffff2a0092ffff9000007effffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffae000000000051ffffffffffffffff413effffffff +ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00007ffffffffffffffc000051ffffffffffffc6000000000000aeffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe00000000000000001eb3ffffffffff2b +0000000000a3fffffe006fffffff2b0000000000a3ffffff2f000075ff6f00fefffe006f +ffffffff6f00feffffa8000000002b3400ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000001eb3ff +ffffffff2b0000000000a3fffffe006fffffff2b0000000000a3ffffff2f000075ff6f00 +feff6f00fefffffffe006fffffff2c0000000064007dffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffae000000000051ffffffffffff510000fcffff +ffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000007fffffffffffff9100000051ffffffffc6000000000000aeffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff6c64656464655daeffffffffffffff +ffad5d6271eeffffffff5db3ffffffffad5d6271eefffffffffb6f54b1ffb35dffffff5d +b3ffffffffb35dfffffffff571606dff9000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff6c64656464655daeffff +ffffffffffffad5d6271eeffffffff5db3ffffffffad5d6271eefffffffffb6f54b1ffb3 +5dffffb35dffffffffff5db3ffffffffaf5e5cbaff0075ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffae000000000051ffffffff5100000091ff +ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000007fffffffffffff450000000051ffffc7000000000000abffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff7007fffffffffff361effffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7600ffffffffffc900b2ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffae000000000051ffff510000000045 +ffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000007ffffffffffffd0000000000005fcf00000000003ef7ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff1f0092ffffff4a00b6ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffaf003ed8ffffc90023ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffae000000000058580000000000 +00fdffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000007fffffffffff8800000000000000000000000039ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc41a000000000067ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff68000000000018c4ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffae00000000000000000000 +000088ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000007fffffffffff08000000000000000000000038ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffaf5f646eefffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff071645eacffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffae0000000000000000 +00000008ffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000007fffffffffc9000000000000000000000047ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9000000000000 +0000000000c9ffffffffffffff000000007fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000007fffffffff760000000000000000000000c8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600000000000 +00000000000076ffffffffffffff000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000007fffffffff09000000000000000000000000c6ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff500000000000 +0000000000000009ffffffffffffff000000007fffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000007fffffffc90000000000000000000000000000c5ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff500000000000 +000000000000000000c9ffffffffffff000000007fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000007fffffff76000000000000000000000000000000c5ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff500000000000 +0000000000000000000076ffffffffffff000000007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000007fffffff0900000000000000000000000000000000c1ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3e0000000000 +000000000000000000000009ffffffffffff000000007fffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff000000007fffffc7000000000000000000000000000000000000 +c2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc71600000000 +00000000000000000000000000c7ffffffffff000000007fffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000007fffff760000000000000000000000000000003470 +a7fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08131 +000000000000000000000000000076ffffffffff000000007fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000007fffff080000000000000000000000003181f0ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffba62000000000000000000000008ffffffffff000000007fffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000007fff8e0000000000000000000062baffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffb7620000000000000000008fffffffff000000007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000000082ff420000000000003181f3fcffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffb76200000000000043ffffffff000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000008bff0000000064b9ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffb67234000000f7ffffff000000007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000094a11e76bcffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff6861e82ffffff000000007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000008cffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff040000007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00000000020f060302020303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303 +03030303030303030303030303030303030303030203060703040b000000007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffd0000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff77720000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000074ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff726f74747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +747474747474747474747474747474747474747474747474747474747474747474747474 +7474747474747474747474747474747474747474747474747474747474747474747463ba +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff87828bffffffffffffffffffc57787ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8777c5ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffc000000bbffffffffffffffff720000fcffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffb000070ffffffff +ffffffffffffffffffffffffffffff6c86ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff6c86ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00000002fcffffffffffffff7f0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00007bffffff +ffffffffffffffffffffffffffffff450076ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff450076ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000000087ffffffffffffff7f0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5ffffff +ffffffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000030000c9ffffffffffff7f0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000081ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000081ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000781f003effffffffffff7f0000ffffffffffff +fffffe908680c7ffffffffffffffffffffffffc480868efeffffffffffffffffffffffff +ffffffffffffffc7808980c4fffffffffffbfbfffffffffffffffffffffff5ffffffffff +ffffffffffc4808980c7ffffffffffffffff050083fffffffffffffffd9086868efeffff +fffffffffffffffffffc8e8680c4ffffffffffffff050083ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00009b98000080ffffffffff7f0000ffffffffff +ffcb3a00000000000982ffffffffff800011ff4e000000000681ffffffffffffffffffff +ffffffffffffbb0300000000003fcbffffffba000045ffffffffffffbb000043fffc0300 +80ffffffff4a000000000002bbfffffffb06020000000003fbffffff4a00000000000682 +fffffffffffb030098d200000000003ad1fffffb06020000000003fbffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763190000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00008aff360007ffffffffff7f0000ffffffff +ffbb00000000000000000047ffffffff7c00044300000000000000c5ffffffffffffffff +ffffffffffff49000000000000000000bbffffffaf000049ffffffffc6000030ffffff00 +007cffffff490000000000000000c5fffffb00000000000000fcffc20000000000000000 +0047ffffffffff00003d040000000000003afffffb00000000000000fbffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787631900 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000080ffc100004dffffffff7f0000ffffff +fff901000036c4fffb7a0500007fffffff7f00000042ffffff4500003bffffffffffffff +ffffffffffffbb000034c5fffffb7d000000f9ffffff430000bcffffff3f0000c0ffffff +00007fffffc100004afffffb7f00002cffffff797700003c8375ffff3c00007dfbffffc5 +3500007fffffffff00000000b9ffffba000000c2ffff797700003c8375ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87876319 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00007fffff7f0000bcffffff7f0000ffff +ffff8e000080fffffffffff5080007ffffff7f00003affffffffff3f0000ffffffffffff +ffffffffffffff01004affffffffffffc000008efffffffb000003ffff4a0000b5ffffff +ff00007fffff780005ffffffffff770067ffffffffff03008bffffff8b0000c0ffffffff +ffff4a0006ffffffff000000b6ffffffffba000079ffffffff03008bffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff878763 +19000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00007ffffff7000001faffff7f0000ff +ffffff400004faffffffffffff7d0000c5ffff7f0000c5ffffffffff850000ffffffffff +ffffffffffffffc50004ffffffffffffffff7f0040ffffffffb300005ec8000040ffffff +ffff00007fffff84000056fffffffffff8ffffffffffff00007fffffff40007fffffffff +ffffffff0400c5ffffff00003effffffffffff00007fffffffff00007fffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff8787 +6319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00007fffffffb2000086ffff7f0000 +ffffffff000077fffffffffffffffc000079ffff7f0000ffffffffffff7f0000ffffffff +ffffffffffffffff7900000a01000000000008010000ffffffffff7c0000000038ffffff +ffffff00007ffffff6000000020777c9ffffffffffffffff00007fffffff000001080000 +000000010a000079ffffff000084ffffffffffff00007fffffffff00007fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff87 +876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00007fffffffff450000c8ff7f00 +00ffffffff000080ffffffffffffffff00007fffff7f0000ffffffffffff7f0000ffff7f +000000000000007fff7f00000000000000000000000000fdffffffffff45000000c9ffff +ffffffff00007fffffffae0000000000000983fdffffffffff00007fffffff0000000000 +000000000000000073ffffff00007fffffffffffff00007fffffffff00007fffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffffff +87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00007ffffffffffd03003cff89 +0000ffffffff000080ffffffffffffffff00007fffff7f0000ffffffffffff7f0000ffff +700000000000000070ff7f00007e7e797979797979797577ffffffffffff4c000041ffff +ffffffffff00007ffffffffff67900000000000000c2ffffffff00007fffffff00003e89 +797979797979797a68bcffffff00007fffffffffffff00007fffffffff00007fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffffff +ff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffff7900009f +9b0000ffffffff00007bffffffffffffffff00007affff7f0000ffffffffffff7f0000ff +ffbc687a7979797a68bcff7a0005ffffffffffffffffffffffffffffffff83000000004b +ffffffffffff00007fffffffffffffffbb793900000038ffffffff00007fffffff000089 +ffffffffffffffffffffffffffff00007fffffffffffff00007fffffffff00007fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ffff +ffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffffff3700 +237c0000ffffffff3a0006feffffffffffff830000bfffff7f0000ffffffffffff7f0000 +ffffffffffffffffffffffffbf000086ffffffffffffffb9baffffffffffbd00004a4800 +00bdffffffffff00007ffffff47dc7ffffffffffff450000ffffffff00007fffffff3a00 +08ffffffffffffffff8ff2fdffffff00007fffffffffffff00007fffffffff00007fffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787ff +ffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffffffc3 +0000080000ffffffff8a000087fffffffffffd0c0004ffffff7f0000ffffffffffff7f00 +00ffffffffffffffffffffffffff040000c2ffffffffffc0000040ffffffff010000ffff +390000c6ffffffff00007ffff90a0038ffffffffffff890000ffffffff000085ffffff8a +00004dffffffffffff470000bcffffff00007fffffffffffff00007fffffffff000085ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff8787 +ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffffff +ff8100000000fffffffff70000003fcdffff850b000079ffffff7f0000ffffffffffff7f +0000ffffffffffffffffffffffffff7900000088ffffff88000000bcffffff490000b6ff +ffc300003cffffffff00007fffff7700003eceffffff8b02007dffffffff000049ffffff +f90000003dceffffce3d000034ffffffff00007fffffffffffff00007fffffffff000049 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff87 +87ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00007fffffffffff +fffff800000000ffffffffffb30000000003000000003effffffff7f0000ffffffffffff +7f0000ffffffffffffffffffffffffffff3e0000000100010000003fffffff8200007eff +ffffff7d000082ffffff00007ffffff505000000030000000000f8ffffffff0000000005 +f7ffb300000000030300000000bfffffffff00007fffffffffffff00007fffffffff0000 +000004faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffffff +8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd000073ffffffff +ffffffffb1000000fdffffffffffc23100000000000176ffffffffff730000fdffffffff +ff730000fdffffffffffffffffffffffffffff760100000000000176ffffffa400003eff +ffffffffff3e0000a4fffd000073fffffff94100000000000031beffffffffffae000000 +0077ffffc23100000000000031c1fffffffffd000073fffffffffffd000073ffffffffae +00000000fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effffff +ff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7867bcffffff +ffffffffffff7d7378fffffffffffffffff5827872bcffffffffffffffbc6778ffffffff +ffffbc6778ffffffffffffffffffffffffffffffffffbc727b72bcfffffffffe78697cff +ffffffffffffff7c6978ffff7867bcfffffffffff482787882f5fffffffffffffffff481 +7869bbfffffffff582787882f5ffffffffffffff7867bcffffffffffff7867bcffffffff +fff4827478ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001effff +ffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001eff +ffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000001e +ffffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000 +1effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000 +001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00 +00001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff7f0000001effffffff8787ffffffff87876319000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff810000001effffffff8787ffffffff87876319000005ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff820000001effffffff8787ffffffff8787631500000005000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000003000000001effffffff8787ffffffff8787741a000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000001effffffff8787ffffffff8787eefffb01000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001effffffff8787ffffffff8787ffffe6371c1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e +1e1e1e1e1e1e1e1e1e1e1e1e1e1e1c38ffffffff8787ffffffff87ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff8787ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff8787ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff8787ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8787ff6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e876e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 109 495 573 +%%EOF diff --git a/doc/user/states.gif b/doc/user/states.gif Binary files differnew file mode 100644 index 0000000000..cd0799ea2e --- /dev/null +++ b/doc/user/states.gif diff --git a/doc/user/states.png b/doc/user/states.png Binary files differnew file mode 100644 index 0000000000..26d8b7784a --- /dev/null +++ b/doc/user/states.png diff --git a/doc/user/task.t b/doc/user/task.t new file mode 100644 index 0000000000..bd3e296828 --- /dev/null +++ b/doc/user/task.t @@ -0,0 +1,1770 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Task Manager + +@cindex tasks + +@section Introduction + +The task manager provides a comprehensive set of directives to +create, delete, and administer tasks. The directives provided +by the task manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}task_create} - Create a task +@item @code{@value{DIRPREFIX}task_ident} - Get ID of a task +@item @code{@value{DIRPREFIX}task_start} - Start a task +@item @code{@value{DIRPREFIX}task_restart} - Restart a task +@item @code{@value{DIRPREFIX}task_delete} - Delete a task +@item @code{@value{DIRPREFIX}task_suspend} - Suspend a task +@item @code{@value{DIRPREFIX}task_resume} - Resume a task +@item @code{@value{DIRPREFIX}task_is_suspended} - Determine if a task is suspended +@item @code{@value{DIRPREFIX}task_set_priority} - Set task priority +@item @code{@value{DIRPREFIX}task_mode} - Change current task's mode +@item @code{@value{DIRPREFIX}task_get_note} - Get task notepad entry +@item @code{@value{DIRPREFIX}task_set_note} - Set task notepad entry +@item @code{@value{DIRPREFIX}task_wake_after} - Wake up after interval +@item @code{@value{DIRPREFIX}task_wake_when} - Wake up when specified +@item @code{@value{DIRPREFIX}task_variable_add} - Associate per task variable +@item @code{@value{DIRPREFIX}task_variable_get} - Obtain value of a a per task variable +@item @code{@value{DIRPREFIX}task_variable_delete} - Remove per task variable +@end itemize + +@section Background + +@subsection Task Definition + +@cindex task, definition + +Many definitions of a task have been proposed in computer literature. +Unfortunately, none of these definitions encompasses all facets of the +concept in a manner which is operating system independent. Several of the +more common definitions are provided to enable each user to select a +definition which best matches their own experience and understanding of the +task concept: + +@itemize @bullet +@item a "dispatchable" unit. + +@item an entity to which the processor is allocated. + +@item an atomic unit of a real-time, multiprocessor system. + +@item single threads of execution which concurrently compete for resources. + +@item a sequence of closely related computations which can execute +concurrently with other computational sequences. + +@end itemize + +From RTEMS' perspective, a task is the smallest thread of +execution which can compete on its own for system resources. A +task is manifested by the existence of a task control block +(TCB). + +@subsection Task Control Block + +The Task Control Block (TCB) is an RTEMS defined data structure +which contains all the information that is pertinent to the +execution of a task. During system initialization, RTEMS +reserves a TCB for each task configured. A TCB is allocated +upon creation of the task and is returned to the TCB free list +upon deletion of the task. + +The TCB's elements are modified as a result of system calls made +by the application in response to external and internal stimuli. +TCBs are the only RTEMS internal data structure that can be +accessed by an application via user extension routines. The TCB +contains a task's name, ID, current priority, current and +starting states, execution mode, set of notepad locations, TCB +user extension pointer, scheduling control structures, as well +as data required by a blocked task. + +A task's context is stored in the TCB when a task switch occurs. +When the task regains control of the processor, its context is +restored from the TCB. When a task is restarted, the initial +state of the task is restored from the starting context area in +the task's TCB. + +@subsection Task States + +@cindex task states + +A task may exist in one of the following five states: + +@itemize @bullet +@item @b{executing} - Currently scheduled to the CPU +@item @b{ready} - May be scheduled to the CPU +@item @b{blocked} - Unable to be scheduled to the CPU +@item @b{dormant} - Created task that is not started +@item @b{non-existent} - Uncreated or deleted task +@end itemize + +An active task may occupy the executing, ready, blocked or +dormant state, otherwise the task is considered non-existent. +One or more tasks may be active in the system simultaneously. +Multiple tasks communicate, synchronize, and compete for system +resources with each other via system calls. The multiple tasks +appear to execute in parallel, but actually each is dispatched +to the CPU for periods of time determined by the RTEMS +scheduling algorithm. The scheduling of a task is based on its +current state and priority. + +@subsection Task Priority + +@cindex task priority +@cindex priority, task +@findex rtems_task_priority + +A task's priority determines its importance in relation to the +other tasks executing on the same processor. RTEMS supports 255 +levels of priority ranging from 1 to 255. The data type +@code{@value{DIRPREFIX}task_priority} is used to store task +priorities. + +Tasks of numerically +smaller priority values are more important tasks than tasks of +numerically larger priority values. For example, a task at +priority level 5 is of higher privilege than a task at priority +level 10. There is no limit to the number of tasks assigned to +the same priority. + +Each task has a priority associated with it at all times. The +initial value of this priority is assigned at task creation +time. The priority of a task may be changed at any subsequent +time. + +Priorities are used by the scheduler to determine which ready +task will be allowed to execute. In general, the higher the +logical priority of a task, the more likely it is to receive +processor execution time. + +@subsection Task Mode + +@cindex task mode +@findex rtems_task_mode + +A task's execution mode is a combination of the following +four components: + +@itemize @bullet +@item preemption +@item ASR processing +@item timeslicing +@item interrupt level +@end itemize + +It is used to modify RTEMS' scheduling process and to alter the +execution environment of the task. The data type +@code{@value{DIRPREFIX}task_mode} is used to manage the task +execution mode. + +@cindex preemption + +The preemption component allows a task to determine when control of the +processor is relinquished. If preemption is disabled +(@code{@value{RPREFIX}NO_PREEMPT}), the task will retain control of the +processor as long as it is in the executing state -- even if a higher +priority task is made ready. If preemption is enabled +(@code{@value{RPREFIX}PREEMPT}) and a higher priority task is made ready, +then the processor will be taken away from the current task immediately and +given to the higher priority task. + +@cindex timeslicing + +The timeslicing component is used by the RTEMS scheduler to determine how +the processor is allocated to tasks of equal priority. If timeslicing is +enabled (@code{@value{RPREFIX}TIMESLICE}), then RTEMS will limit the amount +of time the task can execute before the processor is allocated to another +ready task of equal priority. The length of the timeslice is application +dependent and specified in the Configuration Table. If timeslicing is +disabled (@code{@value{RPREFIX}NO_TIMESLICE}), then the task will be +allowed to execute until a task of higher priority is made ready. If +@code{@value{RPREFIX}NO_PREEMPT} is selected, then the timeslicing +component is ignored by the scheduler. + +The asynchronous signal processing component is used to determine when +received signals are to be processed by the task. +If signal processing is enabled (@code{@value{RPREFIX}ASR}), then signals +sent to the task will be processed the next time the task executes. If +signal processing is disabled (@code{@value{RPREFIX}NO_ASR}), then all +signals received by the task will remain posted until signal processing is +enabled. This component affects only tasks which have established a +routine to process asynchronous signals. + +@cindex interrupt level, task + +The interrupt level component is used to determine which +interrupts will be enabled when the task is executing. +@code{@value{RPREFIX}INTERRUPT_LEVEL(n)} +specifies that the task will execute at interrupt level n. + +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} - enable preemption (default) +@item @code{@value{RPREFIX}NO_PREEMPT} - disable preemption +@item @code{@value{RPREFIX}NO_TIMESLICE} - disable timeslicing (default) +@item @code{@value{RPREFIX}TIMESLICE} - enable timeslicing +@item @code{@value{RPREFIX}ASR} - enable ASR processing (default) +@item @code{@value{RPREFIX}NO_ASR} - disable ASR processing +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} - enable all interrupts (default) +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} - execute at interrupt level n +@end itemize + +The set of default modes may be selected by specifying the +@code{@value{RPREFIX}DEFAULT_MODES} constant. + +@subsection Accessing Task Arguments + +@cindex task arguments +@cindex task prototype + +All RTEMS tasks are invoked with a single argument which is +specified when they are started or restarted. The argument is +commonly used to communicate startup information to the task. +The simplest manner in which to define a task which accesses it +argument is: + +@ifset is-C +@findex rtems_task + +@example +rtems_task user_task( + rtems_task_argument argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task ( + Argument : in RTEMS.Task_Argument_Ptr +); +@end example +@end ifset + +Application tasks requiring more information may view this +single argument as an index into an array of parameter blocks. + +@subsection Floating Point Considerations + +@cindex floating point + +Creating a task with the @code{@value{RPREFIX}FLOATING_POINT} attribute +flag results +in additional memory being allocated for the TCB to store the state of the +numeric coprocessor during task switches. This additional memory is +@b{NOT} allocated for @code{@value{RPREFIX}NO_FLOATING_POINT} tasks. Saving +and restoring the context of a @code{@value{RPREFIX}FLOATING_POINT} task +takes longer than that of a @code{@value{RPREFIX}NO_FLOATING_POINT} task +because of the relatively large amount of time required for the numeric +coprocessor to save or restore its computational state. + +Since RTEMS was designed specifically for embedded military applications +which are floating point intensive, the executive is optimized to avoid +unnecessarily saving and restoring the state of the numeric coprocessor. +The state of the numeric coprocessor is only saved when a +@code{@value{RPREFIX}FLOATING_POINT} task is dispatched and that task was +not the last task to utilize the coprocessor. In a system with only one +@code{@value{RPREFIX}FLOATING_POINT} task, the state of the numeric +coprocessor will never be saved or restored. + +Although the overhead imposed by @code{@value{RPREFIX}FLOATING_POINT} tasks +is minimal, some applications may wish to completely avoid the overhead +associated with @code{@value{RPREFIX}FLOATING_POINT} tasks and still +utilize a numeric coprocessor. By preventing a task from being preempted +while performing a sequence of floating point operations, a +@code{@value{RPREFIX}NO_FLOATING_POINT} task can utilize the numeric +coprocessor without incurring the overhead of a +@code{@value{RPREFIX}FLOATING_POINT} context switch. This approach also +avoids the allocation of a floating point context area. However, if this +approach is taken by the application designer, NO tasks should be created +as @code{@value{RPREFIX}FLOATING_POINT} tasks. Otherwise, the floating +point context will not be correctly maintained because RTEMS assumes that +the state of the numeric coprocessor will not be altered by +@code{@value{RPREFIX}NO_FLOATING_POINT} tasks. + +If the supported processor type does not have hardware floating +capabilities or a standard numeric coprocessor, RTEMS will not provide +built-in support for hardware floating point on that processor. In this +case, all tasks are considered @code{@value{RPREFIX}NO_FLOATING_POINT} +whether created as @code{@value{RPREFIX}FLOATING_POINT} or +@code{@value{RPREFIX}NO_FLOATING_POINT} tasks. A floating point emulation +software library must be utilized for floating point operations. + +On some processors, it is possible to disable the floating point unit +dynamically. If this capability is supported by the target processor, then +RTEMS will utilize this capability to enable the floating point unit only +for tasks which are created with the @code{@value{RPREFIX}FLOATING_POINT} +attribute. The consequence of a @code{@value{RPREFIX}NO_FLOATING_POINT} +task attempting to access the floating point unit is CPU dependent but will +generally result in an exception condition. + +@subsection Per Task Variables + +@cindex per task variables + +Per task variables are used to support global variables whose value +may be unique to a task. After indicating that a variable should be +treated as private (i.e. per-task) the task can access and modify the +variable, but the modifications will not appear to other tasks, and +other tasks' modifications to that variable will not affect the value +seen by the task. This is accomplished by saving and restoring the +variable's value each time a task switch occurs to or from the calling task. + +The value seen by other tasks, including those which have not added the +variable to their set and are thus accessing the variable as a common +location shared among tasks, can not be affected by a task once it has +added a variable to its local set. Changes made to the variable by +other tasks will not affect the value seen by a task which has added the +variable to its private set. + +This feature can be used when a routine is to be spawned repeatedly as +several independent tasks. Although each task will have its own stack, +and thus separate stack variables, they will all share the same static and +global variables. To make a variable not shareable (i.e. a "global" variable +that is specific to a single task), the tasks can call +@code{rtems_task_variable_add} to make a separate copy of the variable +for each task, but all at the same physical address. + +Task variables increase the context switch time to and from the +tasks that own them so it is desirable to minimize the number of +task variables. One efficient method is to have a single task +variable that is a pointer to a dynamically allocated structure +containing the task's private "global" data. + +A critical point with per-task variables is that each task must separately +request that the same global variable is per-task private. + +@subsection Building a Task Attribute Set + +@cindex task attributes, building + +In general, an attribute set is built by a bitwise OR of the +desired components. The set of valid task attribute components +is listed below: + +@itemize @bullet +@item @code{@value{RPREFIX}NO_FLOATING_POINT} - does not use coprocessor (default) +@item @code{@value{RPREFIX}FLOATING_POINT} - uses numeric coprocessor +@item @code{@value{RPREFIX}LOCAL} - local task (default) +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +Attribute values are specifically designed to be mutually +exclusive, therefore bitwise OR and addition operations are +equivalent as long as each attribute appears exactly once in the +component list. A component listed as a default is not required +to appear in the component list, although it is a good +programming practice to specify default components. If all +defaults are desired, then @code{@value{RPREFIX}DEFAULT_ATTRIBUTES} should be used. + +This example demonstrates the attribute_set parameter needed to +create a local task which utilizes the numeric coprocessor. The +attribute_set parameter could be @code{@value{RPREFIX}FLOATING_POINT} or +@code{@value{RPREFIX}LOCAL @value{OR} @value{RPREFIX}FLOATING_POINT}. +The attribute_set parameter can be set to +@code{@value{RPREFIX}FLOATING_POINT} because @code{@value{RPREFIX}LOCAL} is the default for all created +tasks. If the task were global and used the numeric +coprocessor, then the attribute_set parameter would be +@code{@value{RPREFIX}GLOBAL @value{OR} @value{RPREFIX}FLOATING_POINT}. + +@subsection Building a Mode and Mask + +@cindex task mode, building + +In general, a mode and its corresponding mask is built by a +bitwise OR of the desired components. The set of valid mode +constants and each mode's corresponding mask constant is +listed below: + +@ifset use-ascii +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n +@end itemize +@end ifset + +@ifset use-tex +@sp 1 +@c this is temporary +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n + +@end itemize + +@tex +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=3 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Mode Constant</STRONG></TD> + <TD ALIGN=center><STRONG>Mask Constant</STRONG></TD> + <TD ALIGN=center><STRONG>Description</STRONG></TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}PREEMPT</TD> + <TD ALIGN=center>@value{RPREFIX}PREEMPT_MASK</TD> + <TD ALIGN=center>enables preemption</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_PREEMPT</TD> + <TD ALIGN=center>@value{RPREFIX}PREEMPT_MASK</TD> + <TD ALIGN=center>disables preemption</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_TIMESLICE</TD> + <TD ALIGN=center>@value{RPREFIX}TIMESLICE_MASK</TD> + <TD ALIGN=center>disables timeslicing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}TIMESLICE</TD> + <TD ALIGN=center>@value{RPREFIX}TIMESLICE_MASK</TD> + <TD ALIGN=center>enables timeslicing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}ASR</TD> + <TD ALIGN=center>@value{RPREFIX}ASR_MASK</TD> + <TD ALIGN=center>enables ASR processing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_ASR</TD> + <TD ALIGN=center>@value{RPREFIX}ASR_MASK</TD> + <TD ALIGN=center>disables ASR processing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}INTERRUPT_LEVEL(0)</TD> + <TD ALIGN=center>@value{RPREFIX}INTERRUPT_MASK</TD> + <TD ALIGN=center>enables all interrupts</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}INTERRUPT_LEVEL(n)</TD> + <TD ALIGN=center>@value{RPREFIX}INTERRUPT_MASK</TD> + <TD ALIGN=center>sets interrupts level n</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +Mode values are specifically designed to be mutually exclusive, therefore +bitwise OR and addition operations are equivalent as long as each mode +appears exactly once in the component list. A mode component listed as a +default is not required to appear in the mode component list, although it +is a good programming practice to specify default components. If all +defaults are desired, the mode @code{@value{RPREFIX}DEFAULT_MODES} and the +mask @code{@value{RPREFIX}ALL_MODE_MASKS} should be used. + +The following example demonstrates the mode and mask parameters used with +the @code{@value{DIRPREFIX}task_mode} +directive to place a task at interrupt level 3 and make it +non-preemptible. The mode should be set to +@code{@value{RPREFIX}INTERRUPT_LEVEL(3) @value{OR} +@value{RPREFIX}NO_PREEMPT} to indicate the desired preemption mode and +interrupt level, while the mask parameter should be set to +@code{@value{RPREFIX}INTERRUPT_MASK @value{OR} +@value{RPREFIX}NO_PREEMPT_MASK} to indicate that the calling task's +interrupt level and preemption mode are being altered. + +@section Operations + +@subsection Creating Tasks + +The @code{@value{DIRPREFIX}task_create} +directive creates a task by allocating a task +control block, assigning the task a user-specified name, +allocating it a stack and floating point context area, setting a +user-specified initial priority, setting a user-specified +initial mode, and assigning it a task ID. Newly created tasks +are initially placed in the dormant state. All RTEMS tasks +execute in the most privileged mode of the processor. + +@subsection Obtaining Task IDs + +When a task is created, RTEMS generates a unique task ID and +assigns it to the created task until it is deleted. The task ID +may be obtained by either of two methods. First, as the result +of an invocation of the @code{@value{DIRPREFIX}task_create} +directive, the task ID is +stored in a user provided location. Second, the task ID may be +obtained later using the @code{@value{DIRPREFIX}task_ident} +directive. The task ID is +used by other directives to manipulate this task. + +@subsection Starting and Restarting Tasks + +The @code{@value{DIRPREFIX}task_start} +directive is used to place a dormant task in the +ready state. This enables the task to compete, based on its +current priority, for the processor and other system resources. +Any actions, such as suspension or change of priority, performed +on a task prior to starting it are nullified when the task is +started. + +With the @code{@value{DIRPREFIX}task_start} +directive the user specifies the task's +starting address and argument. The argument is used to +communicate some startup information to the task. As part of +this directive, RTEMS initializes the task's stack based upon +the task's initial execution mode and start address. The +starting argument is passed to the task in accordance with the +target processor's calling convention. + +The @code{@value{DIRPREFIX}task_restart} +directive restarts a task at its initial +starting address with its original priority and execution mode, +but with a possibly different argument. The new argument may be +used to distinguish between the original invocation of the task +and subsequent invocations. The task's stack and control block +are modified to reflect their original creation values. +Although references to resources that have been requested are +cleared, resources allocated by the task are NOT automatically +returned to RTEMS. A task cannot be restarted unless it has +previously been started (i.e. dormant tasks cannot be +restarted). All restarted tasks are placed in the ready state. + +@subsection Suspending and Resuming Tasks + +The @code{@value{DIRPREFIX}task_suspend} +directive is used to place either the caller or +another task into a suspended state. The task remains suspended +until a @code{@value{DIRPREFIX}task_resume} +directive is issued. This implies that a +task may be suspended as well as blocked waiting either to +acquire a resource or for the expiration of a timer. + +The @code{@value{DIRPREFIX}task_resume} +directive is used to remove another task from +the suspended state. If the task is not also blocked, resuming +it will place it in the ready state, allowing it to once again +compete for the processor and resources. If the task was +blocked as well as suspended, this directive clears the +suspension and leaves the task in the blocked state. + +Suspending a task which is already suspended or resuming a +task which is not suspended is considered an error. +The @code{@value{DIRPREFIX}task_is_suspended} can be used to +determine if a task is currently suspended. + +@subsection Delaying the Currently Executing Task + +The @code{@value{DIRPREFIX}task_wake_after} directive creates a sleep timer +which allows a task to go to sleep for a specified interval. The task is +blocked until the delay interval has elapsed, at which time the task is +unblocked. A task calling the @code{@value{DIRPREFIX}task_wake_after} +directive with a delay +interval of @code{@value{RPREFIX}YIELD_PROCESSOR} ticks will yield the +processor to any other ready task of equal or greater priority and remain +ready to execute. + +The @code{@value{DIRPREFIX}task_wake_when} +directive creates a sleep timer which allows +a task to go to sleep until a specified date and time. The +calling task is blocked until the specified date and time has +occurred, at which time the task is unblocked. + +@subsection Changing Task Priority + +The @code{@value{DIRPREFIX}task_set_priority} +directive is used to obtain or change the +current priority of either the calling task or another task. If +the new priority requested is +@code{@value{RPREFIX}CURRENT_PRIORITY} or the task's +actual priority, then the current priority will be returned and +the task's priority will remain unchanged. If the task's +priority is altered, then the task will be scheduled according +to its new priority. + +The @code{@value{DIRPREFIX}task_restart} +directive resets the priority of a task to its +original value. + +@subsection Changing Task Mode + +The @code{@value{DIRPREFIX}task_mode} +directive is used to obtain or change the current +execution mode of the calling task. A task's execution mode is +used to enable preemption, timeslicing, ASR processing, and to +set the task's interrupt level. + +The @code{@value{DIRPREFIX}task_restart} +directive resets the mode of a task to its +original value. + +@subsection Notepad Locations + +RTEMS provides sixteen notepad locations for each task. Each +notepad location may contain a note consisting of four bytes of +information. RTEMS provides two directives, +@code{@value{DIRPREFIX}task_set_note} and +@code{@value{DIRPREFIX}task_get_note}, that enable a user +to access and change the +notepad locations. The @code{@value{DIRPREFIX}task_set_note} +directive enables the user +to set a task's notepad entry to a specified note. The +@code{@value{DIRPREFIX}task_get_note} +directive allows the user to obtain the note +contained in any one of the sixteen notepads of a specified task. + +@subsection Task Deletion + +RTEMS provides the @code{@value{DIRPREFIX}task_delete} +directive to allow a task to +delete itself or any other task. This directive removes all +RTEMS references to the task, frees the task's control block, +removes it from resource wait queues, and deallocates its stack +as well as the optional floating point context. The task's name +and ID become inactive at this time, and any subsequent +references to either of them is invalid. In fact, RTEMS may +reuse the task ID for another task which is created later in the +application. + +Unexpired delay timers (i.e. those used by +@code{@value{DIRPREFIX}task_wake_after} and +@code{@value{DIRPREFIX}task_wake_when}) and +timeout timers associated with the task are +automatically deleted, however, other resources dynamically +allocated by the task are NOT automatically returned to RTEMS. +Therefore, before a task is deleted, all of its dynamically +allocated resources should be deallocated by the user. This may +be accomplished by instructing the task to delete itself rather +than directly deleting the task. Other tasks may instruct a +task to delete itself by sending a "delete self" message, event, +or signal, or by restarting the task with special arguments +which instruct the task to delete itself. + +@section Directives + +This section details the task manager's directives. A +subsection is dedicated to each of this manager's directives and +describes the calling sequence, related constants, usage, and +status codes. + +@page + +@subsection TASK_CREATE - Create a task + +@cindex create a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_create +@example +rtems_status_code rtems_task_create( + rtems_name name, + rtems_task_priority initial_priority, + rtems_unsigned32 stack_size, + rtems_mode initial_modes, + rtems_attribute attribute_set, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Create ( + Name : in RTEMS.Name; + Initial_Priority : in RTEMS.Task_Priority; + Stack_Size : in RTEMS.Unsigned32; + Initial_Modes : in RTEMS.Mode; + Attribute_Set : in RTEMS.Attribute; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task created successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority@* +@code{@value{RPREFIX}MP_NOT_CONFIGURED} - multiprocessing not configured@* +@code{@value{RPREFIX}TOO_MANY} - too many tasks created@* +@code{@value{RPREFIX}UNSATISFIED} - not enough memory for stack/FP context@* +@code{@value{RPREFIX}TOO_MANY} - too many global objects + +@subheading DESCRIPTION: +This directive creates a task which resides on the local node. +It allocates and initializes a TCB, a stack, and an optional +floating point context area. The mode parameter contains values +which sets the task's initial execution mode. The +@code{@value{RPREFIX}FLOATING_POINT} attribute should be +specified if the created task +is to use a numeric coprocessor. For performance reasons, it is +recommended that tasks not using the numeric coprocessor should +specify the @code{@value{RPREFIX}NO_FLOATING_POINT} attribute. +If the @code{@value{RPREFIX}GLOBAL} +attribute is specified, the task can be accessed from remote +nodes. The task id, returned in id, is used in other task +related directives to access the task. When created, a task is +placed in the dormant state and can only be made ready to +execute using the directive @code{@value{DIRPREFIX}task_start}. + +@subheading NOTES: +This directive will not cause the calling task to be preempted. + +Valid task priorities range from a high of 1 to a low of 255. + +If the requested stack size is less than +@code{@value{RPREFIX}MINIMUM_STACK_SIZE} bytes, then RTEMS +will use @code{@value{RPREFIX}MINIMUM_STACK_SIZE} as the +stack size. The value of @code{@value{RPREFIX}MINIMUM_STACK_SIZE} +is processor dependent. +Application developers should consider the stack usage of the +device drivers when calculating the stack size required for +tasks which utilize the driver. + +The following task attribute constants are defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}NO_FLOATING_POINT} - does not use coprocessor (default) +@item @code{@value{RPREFIX}FLOATING_POINT} - uses numeric coprocessor +@item @code{@value{RPREFIX}LOCAL} - local task (default) +@item @code{@value{RPREFIX}GLOBAL} - global task +@end itemize + +The following task mode constants are defined by RTEMS: + +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} - enable preemption (default) +@item @code{@value{RPREFIX}NO_PREEMPT} - disable preemption +@item @code{@value{RPREFIX}NO_TIMESLICE} - disable timeslicing (default) +@item @code{@value{RPREFIX}TIMESLICE} - enable timeslicing +@item @code{@value{RPREFIX}ASR} - enable ASR processing (default) +@item @code{@value{RPREFIX}NO_ASR} - disable ASR processing +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} - enable all interrupts (default) +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} - execute at interrupt level n +@end itemize + +The interrupt level portion of the task execution mode +supports a maximum of 256 interrupt levels. These levels are +mapped onto the interrupt levels actually supported by the +target processor in a processor dependent fashion. + +Tasks should not be made global unless remote tasks must +interact with them. This avoids the system overhead incurred by +the creation of a global task. When a global task is created, +the task's name and id must be transmitted to every node in the +system for insertion in the local copy of the global object +table. + +The total number of global objects, including tasks, is limited +by the maximum_global_objects field in the Configuration Table. + +@page + +@subsection TASK_IDENT - Get ID of a task + +@cindex get ID of a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_ident +@example +rtems_status_code rtems_task_ident( + rtems_name name, + rtems_unsigned32 node, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Ident ( + Name : in RTEMS.Name; + Node : in RTEMS.Node; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - invalid task name@* +@code{@value{RPREFIX}INVALID_NODE} - invalid node id + +@subheading DESCRIPTION: +This directive obtains the task id associated with the task name +specified in name. A task may obtain its own id by specifying +@code{@value{RPREFIX}SELF} or its own task name in name. If the task name is not +unique, then the task id returned will match one of the tasks +with that name. However, this task id is not guaranteed to +correspond to the desired task. The task id, returned in id, is +used in other task related directives to access the task. + +@subheading NOTES: +This directive will not cause the running task to be preempted. + +If node is @code{@value{RPREFIX}SEARCH_ALL_NODES}, all nodes are searched with the +local node being searched first. All other nodes are searched +with the lowest numbered node searched first. + +If node is a valid node number which does not represent the +local node, then only the tasks exported by the designated node +are searched. + +This directive does not generate activity on remote nodes. It +accesses only the local copy of the global object table. + +@page + +@subsection TASK_START - Start a task + +@cindex starting a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_start +@example +rtems_status_code rtems_task_start( + rtems_id id, + rtems_task_entry entry_point, + rtems_task_argument argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Start ( + ID : in RTEMS.ID; + Entry_Point : in System.Address; + Argument : in RTEMS.Task_Argument_PTR; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - ask started successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - invalid task entry point@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}INCORRECT_STATE} - task not in the dormant state@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot start remote task + +@subheading DESCRIPTION: +This directive readies the task, specified by tid, for execution +based on the priority and execution mode specified when the task +was created. The starting address of the task is given in +entry_point. The task's starting argument is contained in +argument. This argument can be a single value or used as an +index into an array of parameter blocks. + +@subheading NOTES: +The calling task will be preempted if its preemption mode is +enabled and the task being started has a higher priority. + +Any actions performed on a dormant task such as suspension or +change of priority are nullified when the task is initiated via +the @code{@value{DIRPREFIX}task_start} directive. + +@page + +@subsection TASK_RESTART - Restart a task + +@cindex restarting a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_restart +@example +rtems_status_code rtems_task_restart( + rtems_id id, + rtems_task_argument argument +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Restart ( + ID : in RTEMS.ID; + Argument : in RTEMS.Task_Argument_PTR; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task restarted successfully@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}INCORRECT_STATE} - task never started@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot restart remote task + +@subheading DESCRIPTION: +This directive resets the task specified by id to begin +execution at its original starting address. The task's priority +and execution mode are set to the original creation values. If +the task is currently blocked, RTEMS automatically makes the +task ready. A task can be restarted from any state, except the +dormant state. + +The task's starting argument is contained in argument. This +argument can be a single value or an index into an array of +parameter blocks. This new argument may be used to distinguish +between the initial @code{@value{DIRPREFIX}task_start} +of the task and any ensuing calls +to @code{@value{DIRPREFIX}task_restart} +of the task. This can be beneficial in deleting +a task. Instead of deleting a task using +the @code{@value{DIRPREFIX}task_delete} +directive, a task can delete another task by restarting that +task, and allowing that task to release resources back to RTEMS +and then delete itself. + +@subheading NOTES: +If id is @code{@value{RPREFIX}SELF}, the calling task will be restarted and will not +return from this directive. + +The calling task will be preempted if its preemption mode is +enabled and the task being restarted has a higher priority. + +The task must reside on the local node, even if the task was +created with the @code{@value{RPREFIX}GLOBAL} option. + +@page + +@subsection TASK_DELETE - Delete a task + +@cindex deleting a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_delete +@example +rtems_status_code rtems_task_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task restarted successfully@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - cannot restart remote task + +@subheading DESCRIPTION: +This directive deletes a task, either the calling task or +another task, as specified by id. RTEMS stops the execution of +the task and reclaims the stack memory, any allocated delay or +timeout timers, the TCB, and, if the task is @code{@value{RPREFIX}FLOATING_POINT}, its +floating point context area. RTEMS does not reclaim the +following resources: region segments, partition buffers, +semaphores, timers, or rate monotonic periods. + +@subheading NOTES: +A task is responsible for releasing its resources back to RTEMS +before deletion. To insure proper deallocation of resources, a +task should not be deleted unless it is unable to execute or +does not hold any RTEMS resources. If a task holds RTEMS +resources, the task should be allowed to deallocate its +resources before deletion. A task can be directed to release +its resources and delete itself by restarting it with a special +argument or by sending it a message, an event, or a signal. + +Deletion of the current task (@code{@value{RPREFIX}SELF}) will force RTEMS to select +another task to execute. + +When a global task is deleted, the task id must be transmitted +to every node in the system for deletion from the local copy of +the global object table. + +The task must reside on the local node, even if the task was +created with the @code{@value{RPREFIX}GLOBAL} option. + +@page + +@subsection TASK_SUSPEND - Suspend a task + +@cindex suspending a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_suspend +@example +rtems_status_code rtems_task_suspend( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Suspend ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task restarted successfully@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}ALREADY_SUSPENDED} - task already suspended + +@subheading DESCRIPTION: +This directive suspends the task specified by id from further +execution by placing it in the suspended state. This state is +additive to any other blocked state that the task may already be +in. The task will not execute again until another task issues +the @code{@value{DIRPREFIX}task_resume} +directive for this task and any blocked state +has been removed. + +@subheading NOTES: +The requesting task can suspend itself by specifying @code{@value{RPREFIX}SELF} as id. +In this case, the task will be suspended and a successful +return code will be returned when the task is resumed. + +Suspending a global task which does not reside on the local node +will generate a request to the remote node to suspend the +specified task. + +If the task specified by id is already suspended, then the +@code{@value{RPREFIX}ALREADY_SUSPENDED} status code is returned. + +@page + +@subsection TASK_RESUME - Resume a task + +@cindex resuming a task + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_resume +@example +rtems_status_code rtems_task_resume( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Resume ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task restarted successfully@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}INCORRECT_STATE} - task not suspended + +@subheading DESCRIPTION: +This directive removes the task specified by id from the +suspended state. If the task is in the ready state after the +suspension is removed, then it will be scheduled to run. If the +task is still in a blocked state after the suspension is +removed, then it will remain in that blocked state. + +@subheading NOTES: +The running task may be preempted if its preemption mode is +enabled and the local task being resumed has a higher priority. + +Resuming a global task which does not reside on the local node +will generate a request to the remote node to resume the +specified task. + +If the task specified by id is not suspended, then the +@code{@value{RPREFIX}INCORRECT_STATE} status code is returned. + +@page + +@subsection TASK_IS_SUSPENDED - Determine if a task is Suspended + +@cindex is task suspended + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_is_suspended +@example +rtems_status_code rtems_task_is_suspended( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Is_Suspended ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task is not suspended@* +@code{@value{RPREFIX}ALREADY_SUSPENDED} - task is not suspended@* +@code{@value{RPREFIX}INVALID_ID} - task id invalid@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - not supported on remote tasks + +@subheading DESCRIPTION: + +This directive returns a status code indicating whether or +not the specified task is currently suspended. + +@subheading NOTES: + +This operation is not currently supported on remote tasks. + +@page + +@subsection TASK_SET_PRIORITY - Set task priority + +@findex rtems_task_set_priority +@cindex current task priority +@cindex set task priority +@cindex get task priority +@cindex obtain task priority + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +rtems_status_code rtems_task_set_priority( + rtems_id id, + rtems_task_priority new_priority, + rtems_task_priority *old_priority +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Set_Priority ( + ID : in RTEMS.ID; + New_Priority : in RTEMS.Task_Priority; + Old_Priority : out RTEMS.Task_Priority; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task priority set successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - invalid return argument pointer@* +@code{@value{RPREFIX}INVALID_PRIORITY} - invalid task priority + +@subheading DESCRIPTION: +This directive manipulates the priority of the task specified by +id. An id of @code{@value{RPREFIX}SELF} is used to indicate +the calling task. When new_priority is not equal to +@code{@value{RPREFIX}CURRENT_PRIORITY}, the specified +task's previous priority is returned in old_priority. When +new_priority is @code{@value{RPREFIX}CURRENT_PRIORITY}, +the specified task's current +priority is returned in old_priority. Valid priorities range +from a high of 1 to a low of 255. + +@subheading NOTES: +The calling task may be preempted if its preemption mode is +enabled and it lowers its own priority or raises another task's +priority. + +Setting the priority of a global task which does not reside on +the local node will generate a request to the remote node to +change the priority of the specified task. + +If the task specified by id is currently holding any binary +semaphores which use the priority inheritance algorithm, then +the task's priority cannot be lowered immediately. If the +task's priority were lowered immediately, then priority +inversion results. The requested lowering of the task's +priority will occur when the task has released all priority +inheritance binary semaphores. The task's priority can be +increased regardless of the task's use of priority inheritance +binary semaphores. + +@page + +@subsection TASK_MODE - Change the current task mode + +@cindex current task mode +@cindex set task mode +@cindex get task mode +@cindex set task preemption mode +@cindex get task preemption mode +@cindex obtain task mode + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_mode +@example +rtems_status_code rtems_task_mode( + rtems_mode mode_set, + rtems_mode mask, + rtems_mode *previous_mode_set +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Mode ( + Mode_Set : in RTEMS.Mode; + Mask : in RTEMS.Mode; + Previous_Mode_Set : in RTEMS.Mode; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task mode set successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{previous_mode_set} is NULL + +@subheading DESCRIPTION: +This directive manipulates the execution mode of the calling +task. A task's execution mode enables and disables preemption, +timeslicing, asynchronous signal processing, as well as +specifying the current interrupt level. To modify an execution +mode, the mode class(es) to be changed must be specified in the +mask parameter and the desired mode(s) must be specified in the +mode parameter. + +@subheading NOTES: +The calling task will be preempted if it enables preemption and +a higher priority task is ready to run. + +Enabling timeslicing has no effect if preemption is disabled. For +a task to be timesliced, that task must have both preemption and +timeslicing enabled. + +A task can obtain its current execution mode, without modifying +it, by calling this directive with a mask value of +@code{@value{RPREFIX}CURRENT_MODE}. + +To temporarily disable the processing of a valid ASR, a task +should call this directive with the @code{@value{RPREFIX}NO_ASR} +indicator specified in mode. + +The set of task mode constants and each mode's corresponding +mask constant is provided in the following table: + +@ifset use-ascii +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n + +@end itemize +@end ifset + +@ifset use-tex +@sp 1 +@c this is temporary +@itemize @bullet +@item @code{@value{RPREFIX}PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and enables preemption + +@item @code{@value{RPREFIX}NO_PREEMPT} is masked by +@code{@value{RPREFIX}PREEMPT_MASK} and disables preemption + +@item @code{@value{RPREFIX}NO_TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and disables timeslicing + +@item @code{@value{RPREFIX}TIMESLICE} is masked by +@code{@value{RPREFIX}TIMESLICE_MASK} and enables timeslicing + +@item @code{@value{RPREFIX}ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and enables ASR processing + +@item @code{@value{RPREFIX}NO_ASR} is masked by +@code{@value{RPREFIX}ASR_MASK} and disables ASR processing + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(0)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and enables all interrupts + +@item @code{@value{RPREFIX}INTERRUPT_LEVEL(n)} is masked by +@code{@value{RPREFIX}INTERRUPT_MASK} and sets interrupts level n + +@end itemize + +@tex +@end tex +@end ifset + +@ifset use-html +@html +<CENTER> + <TABLE COLS=3 WIDTH="80%" BORDER=2> +<TR><TD ALIGN=center><STRONG>Mode Constant</STRONG></TD> + <TD ALIGN=center><STRONG>Mask Constant</STRONG></TD> + <TD ALIGN=center><STRONG>Description</STRONG></TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}PREEMPT</TD> + <TD ALIGN=center>@value{RPREFIX}PREEMPT_MASK</TD> + <TD ALIGN=center>enables preemption</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_PREEMPT</TD> + <TD ALIGN=center>@value{RPREFIX}PREEMPT_MASK</TD> + <TD ALIGN=center>disables preemption</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_TIMESLICE</TD> + <TD ALIGN=center>@value{RPREFIX}TIMESLICE_MASK</TD> + <TD ALIGN=center>disables timeslicing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}TIMESLICE</TD> + <TD ALIGN=center>@value{RPREFIX}TIMESLICE_MASK</TD> + <TD ALIGN=center>enables timeslicing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}ASR</TD> + <TD ALIGN=center>@value{RPREFIX}ASR_MASK</TD> + <TD ALIGN=center>enables ASR processing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}NO_ASR</TD> + <TD ALIGN=center>@value{RPREFIX}ASR_MASK</TD> + <TD ALIGN=center>disables ASR processing</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}INTERRUPT_LEVEL(0)</TD> + <TD ALIGN=center>@value{RPREFIX}INTERRUPT_MASK</TD> + <TD ALIGN=center>enables all interrupts</TD></TR> +<TR><TD ALIGN=center>@value{RPREFIX}INTERRUPT_LEVEL(n)</TD> + <TD ALIGN=center>@value{RPREFIX}INTERRUPT_MASK</TD> + <TD ALIGN=center>sets interrupts level n</TD></TR> + </TABLE> +</CENTER> +@end html +@end ifset + +@page + +@subsection TASK_GET_NOTE - Get task notepad entry + +@cindex get task notepad entry + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_get_note +@example +rtems_status_code rtems_task_get_note( + rtems_id id, + rtems_unsigned32 notepad, + rtems_unsigned32 *note +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Get_Note ( + ID : in RTEMS.ID; + Notepad : in RTEMS.Notepad_Index; + Note : out RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - note obtained successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{note} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid notepad location + +@subheading DESCRIPTION: +This directive returns the note contained in the notepad +location of the task specified by id. + +@subheading NOTES: +This directive will not cause the running task to be preempted. + +If id is set to @code{@value{RPREFIX}SELF}, +the calling task accesses its own notepad. + +@c This version of the paragraph avoids the overfull hbox error. +@c The constants NOTEPAD_0 through NOTEPAD_15 can be used to access the +@c sixteen notepad locations. + +The sixteen notepad locations can be accessed using the constants +@code{@value{RPREFIX}NOTEPAD_0} through @code{@value{RPREFIX}NOTEPAD_15}. + +Getting a note of a global task which does not reside on the +local node will generate a request to the remote node to obtain +the notepad entry of the specified task. + +@page + +@subsection TASK_SET_NOTE - Set task notepad entry + +@cindex set task notepad entry + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_set_note +@example +rtems_status_code rtems_task_set_note( + rtems_id id, + rtems_unsigned32 notepad, + rtems_unsigned32 note +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Set_Note ( + ID : in RTEMS.ID; + Notepad : in RTEMS.Notepad_Index; + Note : in RTEMS.Unsigned32; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - task's note set successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid notepad location + +@subheading DESCRIPTION: +This directive sets the notepad entry for the task specified by +id to the value note. + +@subheading NOTES: +If id is set to @code{@value{RPREFIX}SELF}, the calling +task accesses its own notepad locations. + +This directive will not cause the running task to be preempted. + +@c This version of the paragraph avoids the overfull hbox error. +@c The constants NOTEPAD_0 through NOTEPAD_15 can be used to access the +@c sixteen notepad locations. + +The sixteen notepad locations can be accessed using the constants +@code{@value{RPREFIX}NOTEPAD_0} through @code{@value{RPREFIX}NOTEPAD_15}. + +Setting a notepad location of a global task which does not +reside on the local node will generate a request to the remote +node to set the specified notepad entry. + +@page + +@subsection TASK_WAKE_AFTER - Wake up after interval + +@cindex delay a task for an interval +@cindex wake up after an interval + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_wake_after +@example +rtems_status_code rtems_task_wake_after( + rtems_interval ticks +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Wake_After ( + Ticks : in RTEMS.Interval; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - always successful + +@subheading DESCRIPTION: +This directive blocks the calling task for the specified number +of system clock ticks. When the requested interval has elapsed, +the task is made ready. The @code{@value{DIRPREFIX}clock_tick} +directive automatically updates the delay period. + +@subheading NOTES: +Setting the system date and time with the +@code{@value{DIRPREFIX}clock_set} directive +has no effect on a @code{@value{DIRPREFIX}task_wake_after} blocked task. + +A task may give up the processor and remain in the ready state +by specifying a value of @code{@value{RPREFIX}YIELD_PROCESSOR} in ticks. + +The maximum timer interval that can be specified is the maximum +value which can be represented by the rtems_unsigned32 type. + +A clock tick is required to support the functionality of this directive. + +@page + +@subsection TASK_WAKE_WHEN - Wake up when specified + +@cindex delay a task until a wall time +@cindex wake up at a wall time + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_wake_when +@example +rtems_status_code rtems_task_wake_when( + rtems_time_of_day *time_buffer +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Wake_When ( + Time_Buffer : in RTEMS.Time_Of_Day; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - awakened at date/time successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{time_buffer} is NULL@* +@code{@value{RPREFIX}INVALID_TIME_OF_DAY} - invalid time buffer@* +@code{@value{RPREFIX}NOT_DEFINED} - system date and time is not set + +@subheading DESCRIPTION: +This directive blocks a task until the date and time specified +in time_buffer. At the requested date and time, the calling +task will be unblocked and made ready to execute. + +@subheading NOTES: +The ticks portion of time_buffer @value{STRUCTURE} is ignored. The +timing granularity of this directive is a second. + +A clock tick is required to support the functionality of this directive. + +@page + +@subsection TASK_VARIABLE_ADD - Associate per task variable + +@cindex per-task variable +@cindex task private variable +@cindex task private data + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_variable_add +@example +rtems_status_code rtems_task_variable_add( + rtems_id tid, + void **task_variable, + void (*dtor)(void *) +); +@end example +@end ifset + +@ifset is-Ada +@example +type Task_Variable_Dtor is access procedure ( + Argument : in RTEMS.Address; +); + +procedure Task_Variable_Add ( + ID : in RTEMS.ID; + Task_Variable : in RTEMS.Address; + Dtor : in RTEMS.Task_Variable_Dtor; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - per task variable added successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{task_variable} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}NO_MEMORY} - invalid task id@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - not supported on remote tasks@* + +@subheading DESCRIPTION: +This directive adds the memory location specified by the +ptr argument to the context of the given task. The variable will +then be private to the task. The task can access and modify the +variable, but the modifications will not appear to other tasks, and +other tasks' modifications to that variable will not affect the value +seen by the task. This is accomplished by saving and restoring the +variable's value each time a task switch occurs to or from the calling task. +If the dtor argument is non-NULL it specifies the address of a `destructor' +function which will be called when the task is deleted. The argument +passed to the destructor function is the task's value of the variable. + +@subheading NOTES: + +Task variables increase the context switch time to and from the +tasks that own them so it is desirable to minimize the number of +task variables. One efficient method +is to have a single task variable that is a pointer to a dynamically +allocated structure containing the task's private `global' data. +In this case the destructor function could be `free'. + +@page + +@subsection TASK_VARIABLE_GET - Obtain value of a per task variable + +@cindex get per-task variable +@cindex obtain per-task variable + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_variable_get +@example +rtems_status_code rtems_task_variable_get( + rtems_id tid, + void **task_variable, + void **task_variable_value +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Variable_Get ( + ID : in RTEMS.ID; + Task_Variable : out RTEMS.Address; + Task_Variable_Value : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - per task variable added successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{task_variable} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{task_variable_value} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{task_variable} is not found@* +@code{@value{RPREFIX}NO_MEMORY} - invalid task id@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - not supported on remote tasks@* + +@subheading DESCRIPTION: +This directive looks up the private value of a task variable for a +specified task and stores that value in the location pointed to by +the result argument. The specified task is usually not the calling +task, which can get its private value by directly accessing the variable. + +@subheading NOTES: + +If you change memory which @code{task_variable_value} points to, +remember to declare that memory as volatile, so that the compiler +will optimize it correctly. In this case both the pointer +@code{task_variable_value} and data referenced by @code{task_variable_value} +should be considered volatile. + +@page + +@subsection TASK_VARIABLE_DELETE - Remove per task variable + +@cindex per-task variable +@cindex task private variable +@cindex task private data + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_task_variable_delete +@example +rtems_status_code rtems_task_variable_delete( + rtems_id tid, + void **task_variable +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Task_Variable_Delete ( + ID : in RTEMS.ID; + Task_Variable : out RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - per task variable added successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid task id@* +@code{@value{RPREFIX}NO_MEMORY} - invalid task id@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{task_variable} is NULL@* +@code{@value{RPREFIX}ILLEGAL_ON_REMOTE_OBJECT} - not supported on remote tasks@* + +@subheading DESCRIPTION: +This directive removes the given location from a task's context. + +@subheading NOTES: + +NONE diff --git a/doc/user/timer.t b/doc/user/timer.t new file mode 100644 index 0000000000..421fc4f032 --- /dev/null +++ b/doc/user/timer.t @@ -0,0 +1,729 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Timer Manager + +@cindex timers + +@section Introduction + +The timer manager provides support for timer +facilities. The directives provided by the timer manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}timer_create} - Create a timer +@item @code{@value{DIRPREFIX}timer_ident} - Get ID of a timer +@item @code{@value{DIRPREFIX}timer_cancel} - Cancel a timer +@item @code{@value{DIRPREFIX}timer_delete} - Delete a timer +@item @code{@value{DIRPREFIX}timer_fire_after} - Fire timer after interval +@item @code{@value{DIRPREFIX}timer_fire_when} - Fire timer when specified +@item @code{@value{DIRPREFIX}timer_initiate_server} - Initiate server for task-based timers +@item @code{@value{DIRPREFIX}timer_server_fire_after} - Fire task-based timer after interval +@item @code{@value{DIRPREFIX}timer_server_fire_when} - Fire task-based timer when specified +@item @code{@value{DIRPREFIX}timer_reset} - Reset an interval timer +@end itemize + + +@section Background + +@subsection Required Support + +A clock tick is required to support the functionality provided by this manager. + +@subsection Timers + +A timer is an RTEMS object which allows the +application to schedule operations to occur at specific times in +the future. User supplied timer service routines are invoked by +either the @code{@value{DIRPREFIX}clock_tick} directive or +a special Timer Server task when the timer fires. Timer service +routines may perform any operations or directives which normally +would be performed by the application code which invoked the +@code{@value{DIRPREFIX}clock_tick} directive. + +The timer can be used to implement watchdog routines +which only fire to denote that an application error has +occurred. The timer is reset at specific points in the +application to insure that the watchdog does not fire. Thus, if +the application does not reset the watchdog timer, then the +timer service routine will fire to indicate that the application +has failed to reach a reset point. This use of a timer is +sometimes referred to as a "keep alive" or a "deadman" timer. + +@subsection Timer Server + +The Timer Server task is responsible for executing the timer +service routines associated with all task-based timers. +This task executes at a priority higher than any RTEMS application +task and thus can be viewed logically as the lowest priority interrupt. + +By providing a mechanism where timer service routines execute +in task rather than interrupt space, the application is +allowed a bit more flexibility in what operations a timer +service routine can perform. For example, the Timer Server +can be configured to have a floating point context in which case +it would be save to perform floating point operations +from a task-based timer. Most of the time, executing floating +point instructions from an interrupt service routine +is not considered safe. + +The Timer Server is designed to remain blocked until a +task-based timer fires. This reduces the execution overhead +of the Timer Server. + +@subsection Timer Service Routines + +The timer service routine should adhere to @value{LANGUAGE} calling +conventions and have a prototype similar to the following: + +@ifset is-C +@findex rtems_timer_service_routine +@example +rtems_timer_service_routine user_routine( + rtems_id timer_id, + void *user_data +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Routine( + Timer_ID : in RTEMS.ID; + User_Data : in System.Address +); +@end example +@end ifset + +Where the timer_id parameter is the RTEMS object ID +of the timer which is being fired and user_data is a pointer to +user-defined information which may be utilized by the timer +service routine. The argument user_data may be NULL. + +@section Operations + +@subsection Creating a Timer + +The @code{@value{DIRPREFIX}timer_create} directive creates a timer by +allocating a Timer Control Block (TMCB), assigning the timer a +user-specified name, and assigning it a timer ID. Newly created +timers do not have a timer service routine associated with them +and are not active. + +@subsection Obtaining Timer IDs + +When a timer is created, RTEMS generates a unique +timer ID and assigns it to the created timer until it is +deleted. The timer ID may be obtained by either of two methods. +First, as the result of an invocation of the +@code{@value{DIRPREFIX}timer_create} +directive, the timer ID is stored in a user provided location. +Second, the timer ID may be obtained later using the +@code{@value{DIRPREFIX}timer_ident} directive. The timer ID +is used by other directives to manipulate this timer. + +@subsection Initiating an Interval Timer + +The @code{@value{DIRPREFIX}timer_fire_after} +and @code{@value{DIRPREFIX}timer_server_fire_after} +directives initiate a timer to fire a user provided +timer service routine after the specified +number of clock ticks have elapsed. When the interval has +elapsed, the timer service routine will be invoked from the +@code{@value{DIRPREFIX}clock_tick} directive if it was initiated +by the @code{@value{DIRPREFIX}timer_fire_after} directive +and from the Timer Server task if initiated by the +@code{@value{DIRPREFIX}timer_server_fire_after} directive. + +@subsection Initiating a Time of Day Timer + +The @code{@value{DIRPREFIX}timer_fire_when} +and @code{@value{DIRPREFIX}timer_server_fire_when} +directive initiate a timer to +fire a user provided timer service routine when the specified +time of day has been reached. When the interval has elapsed, +the timer service routine will be invoked from the +@code{@value{DIRPREFIX}clock_tick} directive +by the @code{@value{DIRPREFIX}timer_fire_when} directive +and from the Timer Server task if initiated by the +@code{@value{DIRPREFIX}timer_server_fire_when} directive. + +@subsection Canceling a Timer + +The @code{@value{DIRPREFIX}timer_cancel} directive is used to halt the +specified timer. Once canceled, the timer service routine will +not fire unless the timer is reinitiated. The timer can be +reinitiated using the @code{@value{DIRPREFIX}timer_reset}, +@code{@value{DIRPREFIX}timer_fire_after}, and +@code{@value{DIRPREFIX}timer_fire_when} directives. + +@subsection Resetting a Timer + +The @code{@value{DIRPREFIX}timer_reset} directive is used to restore an +interval timer initiated by a previous invocation of +@code{@value{DIRPREFIX}timer_fire_after} or +@code{@value{DIRPREFIX}timer_server_fire_after} to +its original interval length. If the +timer has not been used or the last usage of this timer +was by the @code{@value{DIRPREFIX}timer_fire_when} +or @code{@value{DIRPREFIX}timer_server_fire_when} +directive, then an error is returned. The timer service routine +is not changed or fired by this directive. + +@subsection Initiating the Timer Server + +The @code{@value{DIRPREFIX}timer_initiate_server} directive is used to +allocate and start the execution of the Timer Server task. The +application can specify both the stack size and attributes of the +Timer Server. The Timer Server executes at a priority higher than +any application task and thus the user can expect to be preempted +as the result of executing the @code{@value{DIRPREFIX}timer_initiate_server} +directive. + +@subsection Deleting a Timer + +The @code{@value{DIRPREFIX}timer_delete} directive is used to delete a timer. +If the timer is running and has not expired, the timer is +automatically canceled. The timer's control block is returned +to the TMCB free list when it is deleted. A timer can be +deleted by a task other than the task which created the timer. +Any subsequent references to the timer's name and ID are invalid. + +@section Directives + +This section details the timer manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection TIMER_CREATE - Create a timer + +@cindex create a timer + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_create +@example +rtems_status_code rtems_timer_create( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Create ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer created successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - invalid timer name@* +@code{@value{RPREFIX}TOO_MANY} - too many timers created + +@subheading DESCRIPTION: + +This directive creates a timer. The assigned timer +id is returned in id. This id is used to access the timer with +other timer manager directives. For control and maintenance of +the timer, RTEMS allocates a TMCB from the local TMCB free pool +and initializes it. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_IDENT - Get ID of a timer + +@cindex obtain the ID of a timer + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_ident +@example +rtems_status_code rtems_timer_ident( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Ident ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer identified successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@* +@code{@value{RPREFIX}INVALID_NAME} - timer name not found + +@subheading DESCRIPTION: + +This directive obtains the timer id associated with +the timer name to be acquired. If the timer name is not unique, +then the timer id will match one of the timers with that name. +However, this timer id is not guaranteed to correspond to the +desired timer. The timer id is used to access this timer in +other timer related directives. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_CANCEL - Cancel a timer + +@cindex cancel a timer + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_cancel +@example +rtems_status_code rtems_timer_cancel( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Cancel ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer canceled successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id + +@subheading DESCRIPTION: + +This directive cancels the timer id. This timer will +be reinitiated by the next invocation of @code{@value{DIRPREFIX}timer_reset}, +@code{@value{DIRPREFIX}timer_fire_after}, or +@code{@value{DIRPREFIX}timer_fire_when} with this id. + +@subheading NOTES: + +This directive will not cause the running task to be preempted. + +@c +@c +@c +@page +@subsection TIMER_DELETE - Delete a timer + +@cindex delete a timer + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_delete +@example +rtems_status_code rtems_timer_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id + +@subheading DESCRIPTION: + +This directive deletes the timer specified by id. If +the timer is running, it is automatically canceled. The TMCB +for the deleted timer is reclaimed by RTEMS. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +A timer can be deleted by a task other than the task +which created the timer. + +@c +@c +@c +@page +@subsection TIMER_FIRE_AFTER - Fire timer after interval + +@cindex fire a timer after an interval + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_fire_after +@example +rtems_status_code rtems_timer_fire_after( + rtems_id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Fire_After ( + ID : in RTEMS.ID; + Ticks : in RTEMS.Interval; + Routine : in RTEMS.Timer_Service_Routine; + User_Data : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer initiated successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{routine} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid interval + +@subheading DESCRIPTION: + +This directive initiates the timer specified by id. +If the timer is running, it is automatically canceled before +being initiated. The timer is scheduled to fire after an +interval ticks clock ticks has passed. When the timer fires, +the timer service routine routine will be invoked with the +argument user_data. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_FIRE_WHEN - Fire timer when specified + +@cindex fire a timer at wall time + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_fire_when +@example +rtems_status_code rtems_timer_fire_when( + rtems_id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Fire_When ( + ID : in RTEMS.ID; + Wall_Time : in RTEMS.Time_Of_Day; + Routine : in RTEMS.Timer_Service_Routine; + User_Data : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer initiated successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{routine} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{wall_time} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id@* +@code{@value{RPREFIX}NOT_DEFINED} - system date and time is not set@* +@code{@value{RPREFIX}INVALID_CLOCK} - invalid time of day + +@subheading DESCRIPTION: + +This directive initiates the timer specified by id. +If the timer is running, it is automatically canceled before +being initiated. The timer is scheduled to fire at the time of +day specified by wall_time. When the timer fires, the timer +service routine routine will be invoked with the argument +user_data. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_INITIATE_SERVER - Initiate server for task-based timers + +@cindex initiate the Timer Server + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_initiate_server +@example +rtems_status_code rtems_timer_initiate_server( + unsigned32 stack_size, + rtems_attribute attribute_set +) +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Initiate_Server ( + Stack_Size : in RTEMS.Unsigned32; + Attribute_Set : in RTEMS.Attribute; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - Timer Server initiated successfully@* +@code{@value{RPREFIX}TOO_MANY} - too many tasks created + +@subheading DESCRIPTION: + +This directive initiates the Timer Server task. This task +is responsible for executing all timers initiated via the +@code{@value{DIRPREFIX}timer_server_fire_after} or +@code{@value{DIRPREFIX}timer_server_fire_when} directives. + +@subheading NOTES: + +This directive could cause the calling task to be preempted. + +The Timer Server task is created using the +@code{@value{DIRPREFIX}task_create} service and must be accounted +for when configuring the system. + +Even through this directive invokes the @code{@value{DIRPREFIX}task_create} +and @code{@value{DIRPREFIX}task_start} directives, it should only fail +due to resource allocation problems. + +@c +@c +@c +@page +@subsection TIMER_SERVER_FIRE_AFTER - Fire task-based timer after interval + +@cindex fire task-based a timer after an interval + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_server_fire_after +@example +rtems_status_code rtems_timer_server_fire_after( + rtems_id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Fire_Server_After ( + ID : in RTEMS.ID; + Ticks : in RTEMS.Interval; + Routine : in RTEMS.Timer_Service_Routine; + User_Data : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer initiated successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{routine} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id@* +@code{@value{RPREFIX}INVALID_NUMBER} - invalid interval@* +@code{@value{RPREFIX}INCORRECT_STATE} - Timer Server not initiated + +@subheading DESCRIPTION: + +This directive initiates the timer specified by id and specifies +that when it fires it will be executed by the Timer Server. + +If the timer is running, it is automatically canceled before +being initiated. The timer is scheduled to fire after an +interval ticks clock ticks has passed. When the timer fires, +the timer service routine routine will be invoked with the +argument user_data. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_SERVER_FIRE_WHEN - Fire task-based timer when specified + +@cindex fire a task-based timer at wall time + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_server_fire_when +@example +rtems_status_code rtems_timer_server_fire_when( + rtems_id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Fire_Server_When ( + ID : in RTEMS.ID; + Wall_Time : in RTEMS.Time_Of_Day; + Routine : in RTEMS.Timer_Service_Routine; + User_Data : in RTEMS.Address; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer initiated successfully@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{routine} is NULL@* +@code{@value{RPREFIX}INVALID_ADDRESS} - @code{wall_time} is NULL@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id@* +@code{@value{RPREFIX}NOT_DEFINED} - system date and time is not set@* +@code{@value{RPREFIX}INVALID_CLOCK} - invalid time of day@* +@code{@value{RPREFIX}INCORRECT_STATE} - Timer Server not initiated + +@subheading DESCRIPTION: + +This directive initiates the timer specified by id and specifies +that when it fires it will be executed by the Timer Server. + +If the timer is running, it is automatically canceled before +being initiated. The timer is scheduled to fire at the time of +day specified by wall_time. When the timer fires, the timer +service routine routine will be invoked with the argument +user_data. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection TIMER_RESET - Reset an interval timer + +@cindex reset a timer + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_timer_reset +@example +rtems_status_code rtems_timer_reset( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Timer_Reset ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - timer reset successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid timer id@* +@code{@value{RPREFIX}NOT_DEFINED} - attempted to reset a when or newly created timer + +@subheading DESCRIPTION: + +This directive resets the timer associated with id. +This timer must have been previously initiated with either the +@code{@value{DIRPREFIX}timer_fire_after} or +@code{@value{DIRPREFIX}timer_server_fire_after} +directive. If active the timer is canceled, +after which the timer is reinitiated using the same interval and +timer service routine which the original +@code{@value{DIRPREFIX}timer_fire_after} +@code{@value{DIRPREFIX}timer_server_fire_after} +directive used. + +@subheading NOTES: + +If the timer has not been used or the last usage of this timer +was by a @code{@value{DIRPREFIX}timer_fire_when} or +@code{@value{DIRPREFIX}timer_server_fire_when} +directive, then the @code{@value{RPREFIX}NOT_DEFINED} error is +returned. + +Restarting a cancelled after timer results in the timer being +reinitiated with its previous timer service routine and interval. + +This directive will not cause the running task to be preempted. + diff --git a/doc/user/userext.t b/doc/user/userext.t new file mode 100644 index 0000000000..1d6308d1b1 --- /dev/null +++ b/doc/user/userext.t @@ -0,0 +1,727 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter User Extensions Manager + +@cindex user extensions + +@section Introduction + +The RTEMS User Extensions Manager allows the +application developer to augment the executive by allowing them +to supply extension routines which are invoked at critical +system events. The directives provided by the user extensions +manager are: + +@itemize @bullet +@item @code{@value{DIRPREFIX}extension_create} - Create an extension set +@item @code{@value{DIRPREFIX}extension_ident} - Get ID of an extension set +@item @code{@value{DIRPREFIX}extension_delete} - Delete an extension set +@end itemize + +@section Background + +User extension routines are invoked when the +following system events occur: + +@itemize @bullet +@item Task creation +@item Task initiation +@item Task reinitiation +@item Task deletion +@item Task context switch +@item Post task context switch +@item Task begin +@item Task exits +@item Fatal error detection +@end itemize + +These extensions are invoked as a function with +arguments that are appropriate to the system event. + +@subsection Extension Sets + +@cindex extension set + +An extension set is defined as a set of routines +which are invoked at each of the critical system events at which +user extension routines are invoked. Together a set of these +routines typically perform a specific functionality such as +performance monitoring or debugger support. RTEMS is informed of +the entry points which constitute an extension set via the +following @value{STRUCTURE}: + +@findex rtems_extensions_table +@ifset is-C +@example +@group +typedef struct @{ + rtems_task_create_extension thread_create; + rtems_task_start_extension thread_start; + rtems_task_restart_extension thread_restart; + rtems_task_delete_extension thread_delete; + rtems_task_switch_extension thread_switch; + rtems_task_begin_extension thread_begin; + rtems_task_exitted_extension thread_exitted; + rtems_fatal_extension fatal; +@} rtems_extensions_table; +@end group +@end example +@end ifset + +@ifset is-Ada +@example +type Extensions_Table is + record + Task_Create : RTEMS.Task_Create_Extension; + Task_Start : RTEMS.Task_Start_Extension; + Task_Restart : RTEMS.Task_Restart_Extension; + Task_Delete : RTEMS.Task_Delete_Extension; + Task_Switch : RTEMS.Task_Switch_Extension; + Task_Post_Switch : RTEMS.Task_Post_Switch_Extension; + Task_Begin : RTEMS.Task_Begin_Extension; + Task_Exitted : RTEMS.Task_Exitted_Extension; + Fatal : RTEMS.Fatal_Error_Extension; + end record; +@end example +@end ifset + + +RTEMS allows the user to have multiple extension sets +active at the same time. First, a single static extension set +may be defined as the application's User Extension Table which +is included as part of the Configuration Table. This extension +set is active for the entire life of the system and may not be +deleted. This extension set is especially important because it +is the only way the application can provided a FATAL error +extension which is invoked if RTEMS fails during the +initialize_executive directive. The static extension set is +optional and may be configured as NULL if no static extension +set is required. + +Second, the user can install dynamic extensions using +the @code{@value{DIRPREFIX}extension_create} +directive. These extensions are RTEMS +objects in that they have a name, an ID, and can be dynamically +created and deleted. In contrast to the static extension set, +these extensions can only be created and installed after the +initialize_executive directive successfully completes execution. +Dynamic extensions are useful for encapsulating the +functionality of an extension set. For example, the application +could use extensions to manage a special coprocessor, do +performance monitoring, and to do stack bounds checking. Each +of these extension sets could be written and installed +independently of the others. + +All user extensions are optional and RTEMS places no +naming restrictions on the user. The user extension entry points +are copied into an internal RTEMS structure. This means the user +does not need to keep the table after creating it, and changing the +handler entry points dynamically in a table once created has no +effect. Creating a table local to a function can save space in +space limited applications. + +Extension switches do not effect the context switch overhead if +no switch handler is installed. + +@subsection TCB Extension Area + +@cindex TCB extension area + +RTEMS provides for a pointer to a user-defined data +area for each extension set to be linked to each task's control +block. This set of pointers is an extension of the TCB and can +be used to store additional data required by the user's +extension functions. It is also possible for a user extension +to utilize the notepad locations associated with each task +although this may conflict with application usage of those +particular notepads. + +The TCB extension is an array of pointers in the TCB. The +index into the table can be obtained from the extension id +returned when the extension is created: + +@findex rtems extensions table index +@ifset is-C +@example +@group +index = rtems_get_index(extension_id); +@end group +@end example +@end ifset + +@ifset is-Ada +@example +There is currently no example for Ada. +@end example +@end ifset + +The number of pointers in the area is the same as the number of +user extension sets configured. This allows an application to +augment the TCB with user-defined information. For example, an +application could implement task profiling by storing timing +statistics in the TCB's extended memory area. When a task +context switch is being executed, the TASK_SWITCH extension +could read a real-time clock to calculate how long the task +being swapped out has run as well as timestamp the starting time +for the task being swapped in. + +If used, the extended memory area for the TCB should +be allocated and the TCB extension pointer should be set at the +time the task is created or started by either the TASK_CREATE or +TASK_START extension. The application is responsible for +managing this extended memory area for the TCBs. The memory may +be reinitialized by the TASK_RESTART extension and should be +deallocated by the TASK_DELETE extension when the task is +deleted. Since the TCB extension buffers would most likely be +of a fixed size, the RTEMS partition manager could be used to +manage the application's extended memory area. The application +could create a partition of fixed size TCB extension buffers and +use the partition manager's allocation and deallocation +directives to obtain and release the extension buffers. + +@subsection Extensions + +The sections that follow will contain a description +of each extension. Each section will contain a prototype of a +function with the appropriate calling sequence for the +corresponding extension. The names given for the @value{LANGUAGE} +@value{ROUTINE} and +its arguments are all defined by the user. The names used in +the examples were arbitrarily chosen and impose no naming +conventions on the user. + +@subsubsection TASK_CREATE Extension + +The TASK_CREATE extension directly corresponds to the +@code{@value{DIRPREFIX}task_create} directive. If this extension +is defined in any +static or dynamic extension set and a task is being created, +then the extension routine will automatically be invoked by +RTEMS. The extension should have a prototype similar to the +following: + +@findex rtems_task_create_extension +@findex rtems_extension +@ifset is-C +@example +boolean user_task_create( + rtems_tcb *current_task, + rtems_tcb *new_task +); +@end example +@end ifset + +@ifset is-Ada +@example +function User_Task_Create ( + Current_Task : in RTEMS.TCB_Pointer; + New_Task : in RTEMS.TCB_Pointer +) returns Boolean; +@end example +@end ifset + +where @code{current_task} can be used to access the TCB for +the currently executing task, and new_task can be used to access +the TCB for the new task being created. This extension is +invoked from the @code{@value{DIRPREFIX}task_create} +directive after @code{new_task} has been +completely initialized, but before it is placed on a ready TCB +chain. + +The user extension is expected to return the boolean +value @code{TRUE} if it successfully executed and +@code{FALSE} otherwise. A task create user extension +will frequently attempt to allocate resources. If this +allocation fails, then the extension should return +@code{FALSE} and the entire task create operation +will fail. + +@subsubsection TASK_START Extension + +The TASK_START extension directly corresponds to the +task_start directive. If this extension is defined in any +static or dynamic extension set and a task is being started, +then the extension routine will automatically be invoked by +RTEMS. The extension should have a prototype similar to the +following: + +@findex rtems_task_start_extension +@ifset is-C +@example +rtems_extension user_task_start( + rtems_tcb *current_task, + rtems_tcb *started_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Start ( + Current_Task : in RTEMS.TCB_Pointer; + Started_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the currently executing task, and started_task can be used to +access the TCB for the dormant task being started. This +extension is invoked from the task_start directive after +started_task has been made ready to start execution, but before +it is placed on a ready TCB chain. + +@subsubsection TASK_RESTART Extension + +The TASK_RESTART extension directly corresponds to +the task_restart directive. If this extension is defined in any +static or dynamic extension set and a task is being restarted, +then the extension should have a prototype similar to the +following: + +@findex rtems_task_restart_extension +@ifset is-C +@example +rtems_extension user_task_restart( + rtems_tcb *current_task, + rtems_tcb *restarted_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Restart ( + Current_Task : in RTEMS.TCB_Pointer; + Restarted_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the currently executing task, and restarted_task can be used to +access the TCB for the task being restarted. This extension is +invoked from the task_restart directive after restarted_task has +been made ready to start execution, but before it is placed on a +ready TCB chain. + +@subsubsection TASK_DELETE Extension + +The TASK_DELETE extension is associated with the +task_delete directive. If this extension is defined in any +static or dynamic extension set and a task is being deleted, +then the extension routine will automatically be invoked by +RTEMS. The extension should have a prototype similar to the +following: + +@findex rtems_task_delete_extension +@ifset is-C +@example +rtems_extension user_task_delete( + rtems_tcb *current_task, + rtems_tcb *deleted_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Delete ( + Current_Task : in RTEMS.TCB_Pointer; + Deleted_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the currently executing task, and deleted_task can be used to +access the TCB for the task being deleted. This extension is +invoked from the task_delete directive after the TCB has been +removed from a ready TCB chain, but before all its resources +including the TCB have been returned to their respective free +pools. This extension should not call any RTEMS directives if a +task is deleting itself (current_task is equal to deleted_task). + +@subsubsection TASK_SWITCH Extension + +The TASK_SWITCH extension corresponds to a task +context switch. If this extension is defined in any static or +dynamic extension set and a task context switch is in progress, +then the extension routine will automatically be invoked by +RTEMS. The extension should have a prototype similar to the +following: + +@findex rtems_task_switch_extension +@ifset is-C +@example +rtems_extension user_task_switch( + rtems_tcb *current_task, + rtems_tcb *heir_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Switch ( + Current_Task : in RTEMS.TCB_Pointer; + Heir_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the task that is being swapped out, and heir_task can be used to +access the TCB for the task being swapped in. This extension is +invoked from RTEMS' dispatcher routine after the current_task +context has been saved, but before the heir_task context has +been restored. This extension should not call any RTEMS +directives. + +@subsubsection TASK_BEGIN Extension + +The TASK_BEGIN extension is invoked when a task +begins execution. It is invoked immediately before the body of +the starting procedure and executes in the context in the task. +This user extension have a prototype similar to the following: + +@findex rtems_task_begin_extension +@ifset is-C +@example +rtems_extension user_task_begin( + rtems_tcb *current_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Begin ( + Current_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the currently executing task which has begun. The distinction +between the TASK_BEGIN and TASK_START extension is that the +TASK_BEGIN extension is executed in the context of the actual +task while the TASK_START extension is executed in the context +of the task performing the task_start directive. For most +extensions, this is not a critical distinction. + +@subsubsection TASK_EXITTED Extension + +The TASK_EXITTED extension is invoked when a task +exits the body of the starting procedure by either an implicit +or explicit return statement. This user extension have a +prototype similar to the following: + +@findex rtems_task_exitted_extension +@ifset is-C +@example +rtems_extension user_task_exitted( + rtems_tcb *current_task +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Task_Exitted ( + Current_Task : in RTEMS.TCB_Pointer +); +@end example +@end ifset + +where current_task can be used to access the TCB for +the currently executing task which has just exitted. + +Although exiting of task is often considered to be a +fatal error, this extension allows recovery by either restarting +or deleting the exiting task. If the user does not wish to +recover, then a fatal error may be reported. If the user does +not provide a TASK_EXITTED extension or the provided handler +returns control to RTEMS, then the RTEMS default handler will be +used. This default handler invokes the directive +fatal_error_occurred with the @code{@value{RPREFIX}TASK_EXITTED} directive status. + +@subsubsection FATAL Error Extension + +The FATAL error extension is associated with the +fatal_error_occurred directive. If this extension is defined in +any static or dynamic extension set and the fatal_error_occurred +directive has been invoked, then this extension will be called. +This extension should have a prototype similar to the following: + +@findex rtems_fatal_extension +@ifset is-C +@example +rtems_extension user_fatal_error( + Internal_errors_Source the_source, + rtems_boolean is_internal, + rtems_unsigned32 the_error +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure User_Fatal_Error ( + Error : in RTEMS.Unsigned32 +); +@end example +@end ifset + +where the_error is the error code passed to the +fatal_error_occurred directive. This extension is invoked from +the fatal_error_occurred directive. + +If defined, the user's FATAL error extension is +invoked before RTEMS' default fatal error routine is invoked and +the processor is stopped. For example, this extension could be +used to pass control to a debugger when a fatal error occurs. +This extension should not call any RTEMS directives. + +@subsection Order of Invocation + +When one of the critical system events occur, the +user extensions are invoked in either "forward" or "reverse" +order. Forward order indicates that the static extension set is +invoked followed by the dynamic extension sets in the order in +which they were created. Reverse order means that the dynamic +extension sets are invoked in the opposite of the order in which +they were created followed by the static extension set. By +invoking the extension sets in this order, extensions can be +built upon one another. At the following system events, the +extensions are invoked in forward order: + +@itemize @bullet +@item Task creation +@item Task initiation +@item Task reinitiation +@item Task deletion +@item Task context switch +@item Post task context switch +@item Task begins to execute +@end itemize + + +At the following system events, the extensions are +invoked in reverse order: + +@itemize @bullet +@item Task deletion +@item Fatal error detection +@end itemize + +At these system events, the extensions are invoked in +reverse order to insure that if an extension set is built upon +another, the more complicated extension is invoked before the +extension set it is built upon. For example, by invoking the +static extension set last it is known that the "system" fatal +error extension will be the last fatal error extension executed. +Another example is use of the task delete extension by the +Standard C Library. Extension sets which are installed after +the Standard C Library will operate correctly even if they +utilize the C Library because the C Library's TASK_DELETE +extension is invoked after that of the other extensions. + +@section Operations + +@subsection Creating an Extension Set + +The @code{@value{DIRPREFIX}extension_create} directive creates and installs +an extension set by allocating a Extension Set Control Block +(ESCB), assigning the extension set a user-specified name, and +assigning it an extension set ID. Newly created extension sets +are immediately installed and are invoked upon the next system +even supporting an extension. + +@subsection Obtaining Extension Set IDs + +When an extension set is created, RTEMS generates a +unique extension set ID and assigns it to the created extension +set until it is deleted. The extension ID may be obtained by +either of two methods. First, as the result of an invocation of +the @code{@value{DIRPREFIX}extension_create} +directive, the extension set ID is stored +in a user provided location. Second, the extension set ID may +be obtained later using the @code{@value{DIRPREFIX}extension_ident} +directive. The extension set ID is used by other directives +to manipulate this extension set. + +@subsection Deleting an Extension Set + +The @code{@value{DIRPREFIX}extension_delete} directive is used to delete an +extension set. The extension set's control block is returned to +the ESCB free list when it is deleted. An extension set can be +deleted by a task other than the task which created the +extension set. Any subsequent references to the extension's +name and ID are invalid. + +@section Directives + +This section details the user extension manager's +directives. A subsection is dedicated to each of this manager's +directives and describes the calling sequence, related +constants, usage, and status codes. + +@c +@c +@c +@page +@subsection EXTENSION_CREATE - Create a extension set + +@cindex create an extension set + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_extension_create +@example +rtems_status_code rtems_extension_create( + rtems_name name, + rtems_extensions_table *table, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Extension_Create ( + Name : in RTEMS.Name; + Table : in RTEMS.Extensions_Table_Pointer; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - extension set created successfully@* +@code{@value{RPREFIX}INVALID_NAME} - invalid extension set name@* +@code{@value{RPREFIX}TOO_MANY} - too many extension sets created + +@subheading DESCRIPTION: + +This directive creates a extension set. The assigned +extension set id is returned in id. This id is used to access +the extension set with other user extension manager directives. +For control and maintenance of the extension set, RTEMS +allocates an ESCB from the local ESCB free pool and initializes +it. + +@subheading NOTES: + +This directive will not cause the calling task to be +preempted. + +@c +@c +@c +@page +@subsection EXTENSION_IDENT - Get ID of a extension set + +@cindex get ID of an extension set +@cindex obtain ID of an extension set + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_extension_ident +@example +rtems_status_code rtems_extension_ident( + rtems_name name, + rtems_id *id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Extension_Ident ( + Name : in RTEMS.Name; + ID : out RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - extension set identified successfully@* +@code{@value{RPREFIX}INVALID_NAME} - extension set name not found + +@subheading DESCRIPTION: + +This directive obtains the extension set id +associated with the extension set name to be acquired. If the +extension set name is not unique, then the extension set id will +match one of the extension sets with that name. However, this +extension set id is not guaranteed to correspond to the desired +extension set. The extension set id is used to access this +extension set in other extension set related directives. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +@c +@c +@c +@page +@subsection EXTENSION_DELETE - Delete a extension set + +@cindex delete an extension set + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex rtems_extension_delete +@example +rtems_status_code rtems_extension_delete( + rtems_id id +); +@end example +@end ifset + +@ifset is-Ada +@example +procedure Extension_Delete ( + ID : in RTEMS.ID; + Result : out RTEMS.Status_Codes +); +@end example +@end ifset + +@subheading DIRECTIVE STATUS CODES: +@code{@value{RPREFIX}SUCCESSFUL} - extension set deleted successfully@* +@code{@value{RPREFIX}INVALID_ID} - invalid extension set id + +@subheading DESCRIPTION: + +This directive deletes the extension set specified by +id. If the extension set is running, it is automatically +canceled. The ESCB for the deleted extension set is reclaimed +by RTEMS. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. + +A extension set can be deleted by a task other than +the task which created the extension set. + +@subheading NOTES: + +This directive will not cause the running task to be +preempted. |