1
0

Hello TOR 2k24

Have fun 🚀
This commit is contained in:
Christopher Métrailler 2024-04-10 19:17:57 +02:00
commit f821a46ea0
No known key found for this signature in database
GPG Key ID: 360E91EAFDAD9352
62 changed files with 21518 additions and 0 deletions

1162
Audio_746G_Discovery.c Normal file

File diff suppressed because it is too large Load Diff

203
Board_Audio.h Normal file
View File

@ -0,0 +1,203 @@
/*-----------------------------------------------------------------------------
* Name: Board_Audio.h
* Purpose: Audio interface header file
* Rev.: 1.1.0
*-----------------------------------------------------------------------------*/
/* Copyright (c) 2013 - 2014 ARM LIMITED
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of ARM nor the names of its contributors may be used
to endorse or promote products derived from this software without
specific prior written permission.
*
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
#ifndef __BOARD_AUDIO_H
#define __BOARD_AUDIO_H
#include <stdint.h>
#include <stdbool.h>
/* Audio Stream identifier */
#define AUDIO_STREAM_OUT 0x00 ///< Output stream
#define AUDIO_STREAM_IN 0x80 ///< Input stream
/* Audio Channel identifier */
#define AUDIO_CHANNEL_MASTER 0 ///< Master channel
#define AUDIO_CHANNEL_LEFT 1 ///< Left channel (stereo)
#define AUDIO_CHANNEL_RIGHT 2 ///< Right channel (stereo)
/* Audio Data format */
#define AUDIO_DATA_8_MONO 0x01 ///< 8-bit samples (uint8_t)
#define AUDIO_DATA_16_MONO 0x02 ///< 16-bit samples (uint16_t)
#define AUDIO_DATA_32_MONO 0x04 ///< 32-bit samples (uint32_t)
#define AUDIO_DATA_8_STEREO 0x81 ///< 2* 8-bit stereo samples: L R (uint8_t)
#define AUDIO_DATA_16_STEREO 0x82 ///< 2*16-bit stereo samples: L R (uint16_t)
#define AUDIO_DATA_32_STEREO 0x84 ///< 2*32-bit stereo samples: L R (uint32_t)
/* Audio Volume */
#define AUDIO_VOLUME_AUTO_GAIN 0x80 ///< Automatic gain control
/* Audio Events */
#define AUDIO_EVENT_SEND_COMPLETE (1UL << 0) ///< Send completed
#define AUDIO_EVENT_RECEIVE_COMPLETE (1UL << 1) ///< Receive completed
#define AUDIO_EVENT_TX_UNDERFLOW (1UL << 2) ///< Transmit data not available
#define AUDIO_EVENT_RX_OVERFLOW (1UL << 3) ///< Receive data overflow
/**
\fn int32_t Audio_Initialize (Audio_SignalEvent_t cb_event)
\brief Initialize Audio Interface
\param[in] cb_event pointer to event notification function
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_Uninitialize (void)
\brief De-initialize Audio Interface
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_SendData (const void *data, uint32_t num)
\brief Prepare for sending data to Audio output stream
\param[in] data pointer to buffer with data to send
\param[in] num number of data items to send
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_ReceiveData (void *data, uint32_t num)
\brief Prepare for receiving data from Audio input stream
\param[out] data pointer to buffer for data to receive
\param[in] num number of data items to send
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn uint32_t Audio_GetDataTxCount (void)
\brief Get transmitted data count
\returns number of data items transmitted
*/
/**
\fn uint32_t Audio_GetDataRxCount (void)
\brief Get received data count
\returns number of data items received
*/
/**
\fn int32_t Audio_Start (uint8_t stream)
\brief Start Audio stream
\param[in] stream stream identifier
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_Stop (uint8_t stream)
\brief Stop Audio stream
\param[in] stream stream identifier
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_Pause (uint8_t stream)
\brief Pause Audio stream
\param[in] stream stream identifier
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_Resume (uint8_t stream)
\brief Resume Audio stream
\param[in] stream stream identifier
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_SetVolume (uint8_t stream, uint8_t channel, uint8_t volume)
\brief Set volume level for Audio stream
\param[in] stream stream identifier
\param[in] channel channel identifier
\param[in] volume volume level (0..100)
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_SetMute (uint8_t stream, uint8_t channel, bool mute)
\brief Set mute state for Audio stream
\param[in] stream stream identifier
\param[in] channel channel identifier
\param[in] mute mute state
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_SetDataFormat (uint8_t stream, uint8_t format)
\brief Set Audio data format
\param[in] stream stream identifier
\param[in] format data format
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn int32_t Audio_SetFrequency (uint8_t stream, uint32_t frequency)
\brief Set Audio stream frequency
\param[in] stream stream identifier
\param[in] frequency Audio frequency in Hz
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
/**
\fn void Audio_SignalEvent (uint32_t event)
\brief Signal Audio Events
\param[in] event notification mask
\return none
*/
typedef void (*Audio_SignalEvent_t) (uint32_t event);
extern int32_t Audio_Initialize (Audio_SignalEvent_t cb_event);
extern int32_t Audio_Uninitialize (void);
extern int32_t Audio_SendData (const void *data, uint32_t num);
extern int32_t Audio_ReceiveData ( void *data, uint32_t num);
extern uint32_t Audio_GetDataTxCount(void);
extern uint32_t Audio_GetDataRxCount(void);
extern int32_t Audio_Start (uint8_t stream);
extern int32_t Audio_Stop (uint8_t stream);
extern int32_t Audio_Pause (uint8_t stream);
extern int32_t Audio_Resume (uint8_t stream);
extern int32_t Audio_SetVolume (uint8_t stream, uint8_t channel, uint8_t volume);
extern int32_t Audio_SetMute (uint8_t stream, uint8_t channel, bool mute);
extern int32_t Audio_SetDataFormat (uint8_t stream, uint8_t format);
extern int32_t Audio_SetFrequency (uint8_t stream, uint32_t frequency);
#endif /* __BOARD_AUDIO_H */

9
EventRecorderStub.scvd Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
<events>
</events>
</component_viewer>

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# 227-PTR Token Ring base project
The base code for the Token Ring project was developed as part of the HEI Real-Time Programming (227-PTR) course.
The provided project is a real-time chat application based on a custom Token Ring protocol implementation using the RTX5 (CMSIS-RTOS2) RTOS.
This is a Keil uVision project that is ready to use. It was tested with Keil ARMCC version 5.06 update 7 (build 960). The project compiles without error but is not functional since the MAC layers have not been implemented.
The project runs on an ARM Cortex-M7 STM32F746 SoC at 216 MHz. uGFX (https://ugfx.io/) is used as a graphical library. The provided project has the stdout/ITM enabled (Debug printf Viewer) and the Event Recorder by default. TraceAnlyzer can be used to debug the real-time application. All configuration settings are available in the `main.h` header file.

63
RTE/CMSIS/RTX_Config.c Normal file
View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2013-2017 ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* -----------------------------------------------------------------------------
*
* $Revision: V5.1.0
*
* Project: CMSIS-RTOS RTX
* Title: RTX Configuration
*
* -----------------------------------------------------------------------------
*/
#include "cmsis_compiler.h"
#include "rtx_os.h"
// OS Idle Thread
__WEAK __NO_RETURN void osRtxIdleThread (void *argument) {
(void)argument;
for (;;) {}
}
// OS Error Callback function
__WEAK uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
(void)object_id;
switch (code) {
case osRtxErrorStackUnderflow:
// Stack overflow detected for thread (thread_id=object_id)
break;
case osRtxErrorISRQueueOverflow:
// ISR Queue overflow detected when inserting object (object_id)
break;
case osRtxErrorTimerQueueOverflow:
// User Timer Callback Queue overflow detected for timer (timer_id=object_id)
break;
case osRtxErrorClibSpace:
// Standard C/C++ library libspace not available: increase OS_THREAD_LIBSPACE_NUM
break;
case osRtxErrorClibMutex:
// Standard C/C++ library mutex initialization failed
break;
default:
break;
}
for (;;) {}
//return 0U;
}

395
RTE/CMSIS/RTX_Config.h Normal file
View File

@ -0,0 +1,395 @@
/*
* Copyright (c) 2013-2017 ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* -----------------------------------------------------------------------------
*
* $Revision: V5.2.0
*
* Project: CMSIS-RTOS RTX
* Title: RTX Configuration definitions
*
* -----------------------------------------------------------------------------
*/
#ifndef RTX_CONFIG_H_
#define RTX_CONFIG_H_
//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
// <h>System Configuration
// =======================
// <o>Global Dynamic Memory size [bytes] <0-1073741824:8>
// <i> Defines the combined global dynamic memory size.
// <i> Default: 4096
#ifndef OS_DYNAMIC_MEM_SIZE
#define OS_DYNAMIC_MEM_SIZE 100000
#endif
// <o>Kernel Tick Frequency [Hz] <1-1000000>
// <i> Defines base time unit for delays and timeouts.
// <i> Default: 1000 (1ms tick)
#ifndef OS_TICK_FREQ
#define OS_TICK_FREQ 1000
#endif
// <e>Round-Robin Thread switching
// <i> Enables Round-Robin Thread switching.
#ifndef OS_ROBIN_ENABLE
#define OS_ROBIN_ENABLE 1
#endif
// <o>Round-Robin Timeout <1-1000>
// <i> Defines how many ticks a thread will execute before a thread switch.
// <i> Default: 5
#ifndef OS_ROBIN_TIMEOUT
#define OS_ROBIN_TIMEOUT 5
#endif
// </e>
// <h>Event Recording
// <q>Memory Management
// <i> Enables Memory Management events recording.
#ifndef OS_EVR_MEMORY
#define OS_EVR_MEMORY 1
#endif
// <q>Kernel
// <i> Enables Kernel events recording.
#ifndef OS_EVR_KERNEL
#define OS_EVR_KERNEL 1
#endif
// <q>Thread
// <i> Enables Thread events recording.
#ifndef OS_EVR_THREAD
#define OS_EVR_THREAD 1
#endif
// <q>Timer
// <i> Enables Timer events recording.
#ifndef OS_EVR_TIMER
#define OS_EVR_TIMER 1
#endif
// <q>Event Flags
// <i> Enables Event Flags events recording.
#ifndef OS_EVR_EVFLAGS
#define OS_EVR_EVFLAGS 1
#endif
// <q>Mutex
// <i> Enables Mutex events recording.
#ifndef OS_EVR_MUTEX
#define OS_EVR_MUTEX 0
#endif
// <q>Semaphore
// <i> Enables Semaphore events recording.
#ifndef OS_EVR_SEMAPHORE
#define OS_EVR_SEMAPHORE 0
#endif
// <q>Memory Pool
// <i> Enables Memory Pool events recording.
#ifndef OS_EVR_MEMPOOL
#define OS_EVR_MEMPOOL 1
#endif
// <q>Message Queue
// <i> Enables Message Queue events recording.
#ifndef OS_EVR_MSGQUEUE
#define OS_EVR_MSGQUEUE 1
#endif
// </h>
// <o>ISR FIFO Queue
// <4=> 4 entries <8=> 8 entries <12=> 12 entries <16=> 16 entries
// <24=> 24 entries <32=> 32 entries <48=> 48 entries <64=> 64 entries
// <96=> 96 entries <128=> 128 entries <196=> 196 entries <256=> 256 entries
// <i> RTOS Functions called from ISR store requests to this buffer.
// <i> Default: 16 entries
#ifndef OS_ISR_FIFO_QUEUE
#define OS_ISR_FIFO_QUEUE 16
#endif
// </h>
// <h>Thread Configuration
// =======================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_THREAD_OBJ_MEM
#define OS_THREAD_OBJ_MEM 0
#endif
// <o>Number of user Threads <1-1000>
// <i> Defines maximum number of user threads that can be active at the same time.
// <i> Applies to user threads with system provided memory for control blocks.
#ifndef OS_THREAD_NUM
#define OS_THREAD_NUM 1
#endif
// <o>Number of user Threads with default Stack size <0-1000>
// <i> Defines maximum number of user threads with default stack size.
// <i> Applies to user threads with zero stack size specified.
#ifndef OS_THREAD_DEF_STACK_NUM
#define OS_THREAD_DEF_STACK_NUM 0
#endif
// <o>Total Stack size [bytes] for user Threads with user-provided Stack size <0-1073741824:8>
// <i> Defines the combined stack size for user threads with user-provided stack size.
// <i> Applies to user threads with user-provided stack size and system provided memory for stack.
// <i> Default: 0
#ifndef OS_THREAD_USER_STACK_SIZE
#define OS_THREAD_USER_STACK_SIZE 0
#endif
// </e>
// <o>Default Thread Stack size [bytes] <96-1073741824:8>
// <i> Defines stack size for threads with zero stack size specified.
// <i> Default: 200
#ifndef OS_STACK_SIZE
#define OS_STACK_SIZE 200
#endif
// <o>Idle Thread Stack size [bytes] <72-1073741824:8>
// <i> Defines stack size for Idle thread.
// <i> Default: 200
#ifndef OS_IDLE_THREAD_STACK_SIZE
#define OS_IDLE_THREAD_STACK_SIZE 200
#endif
// <o>Idle Thread TrustZone Module Identifier
// <i> Defines TrustZone Thread Context Management Identifier.
// <i> Applies only to cores with TrustZone technology.
// <i> Default: 0 (not used)
#ifndef OS_IDLE_THREAD_TZ_MOD_ID
#define OS_IDLE_THREAD_TZ_MOD_ID 0
#endif
// <q>Stack overrun checking
// <i> Enable stack overrun checks at thread switch.
// <i> Enabling this option increases slightly the execution time of a thread switch.
#ifndef OS_STACK_CHECK
#define OS_STACK_CHECK 1
#endif
// <q>Stack usage watermark
// <i> Initialize thread stack with watermark pattern for analyzing stack usage.
// <i> Enabling this option increases significantly the execution time of thread creation.
#ifndef OS_STACK_WATERMARK
#define OS_STACK_WATERMARK 0
#endif
// <o>Processor mode for Thread execution
// <0=> Unprivileged mode
// <1=> Privileged mode
// <i> Default: Privileged mode
#ifndef OS_PRIVILEGE_MODE
#define OS_PRIVILEGE_MODE 1
#endif
// </h>
// <h>Timer Configuration
// ======================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_TIMER_OBJ_MEM
#define OS_TIMER_OBJ_MEM 0
#endif
// <o>Number of Timer objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_TIMER_NUM
#define OS_TIMER_NUM 1
#endif
// </e>
// <o>Timer Thread Priority
// <8=> Low
// <16=> Below Normal <24=> Normal <32=> Above Normal
// <40=> High
// <48=> Realtime
// <i> Defines priority for timer thread
// <i> Default: High
#ifndef OS_TIMER_THREAD_PRIO
#define OS_TIMER_THREAD_PRIO 40
#endif
// <o>Timer Thread Stack size [bytes] <0-1073741824:8>
// <i> Defines stack size for Timer thread.
// <i> May be set to 0 when timers are not used.
// <i> Default: 200
#ifndef OS_TIMER_THREAD_STACK_SIZE
#define OS_TIMER_THREAD_STACK_SIZE 200
#endif
// <o>Timer Thread TrustZone Module Identifier
// <i> Defines TrustZone Thread Context Management Identifier.
// <i> Applies only to cores with TrustZone technology.
// <i> Default: 0 (not used)
#ifndef OS_TIMER_THREAD_TZ_MOD_ID
#define OS_TIMER_THREAD_TZ_MOD_ID 0
#endif
// <o>Timer Callback Queue entries <0-256>
// <i> Number of concurrent active timer callback functions.
// <i> May be set to 0 when timers are not used.
// <i> Default: 4
#ifndef OS_TIMER_CB_QUEUE
#define OS_TIMER_CB_QUEUE 4
#endif
// </h>
// <h>Event Flags Configuration
// ============================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_EVFLAGS_OBJ_MEM
#define OS_EVFLAGS_OBJ_MEM 0
#endif
// <o>Number of Event Flags objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_EVFLAGS_NUM
#define OS_EVFLAGS_NUM 1
#endif
// </e>
// </h>
// <h>Mutex Configuration
// ======================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_MUTEX_OBJ_MEM
#define OS_MUTEX_OBJ_MEM 0
#endif
// <o>Number of Mutex objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_MUTEX_NUM
#define OS_MUTEX_NUM 1
#endif
// </e>
// </h>
// <h>Semaphore Configuration
// ==========================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_SEMAPHORE_OBJ_MEM
#define OS_SEMAPHORE_OBJ_MEM 0
#endif
// <o>Number of Semaphore objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_SEMAPHORE_NUM
#define OS_SEMAPHORE_NUM 1
#endif
// </e>
// </h>
// <h>Memory Pool Configuration
// ============================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_MEMPOOL_OBJ_MEM
#define OS_MEMPOOL_OBJ_MEM 0
#endif
// <o>Number of Memory Pool objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_MEMPOOL_NUM
#define OS_MEMPOOL_NUM 1
#endif
// <o>Data Storage Memory size [bytes] <0-1073741824:8>
// <i> Defines the combined data storage memory size.
// <i> Applies to objects with system provided memory for data storage.
// <i> Default: 0
#ifndef OS_MEMPOOL_DATA_SIZE
#define OS_MEMPOOL_DATA_SIZE 0
#endif
// </e>
// </h>
// <h>Message Queue Configuration
// ==============================
// <e>Object specific Memory allocation
// <i> Enables object specific memory allocation.
#ifndef OS_MSGQUEUE_OBJ_MEM
#define OS_MSGQUEUE_OBJ_MEM 0
#endif
// <o>Number of Message Queue objects <1-1000>
// <i> Defines maximum number of objects that can be active at the same time.
// <i> Applies to objects with system provided memory for control blocks.
#ifndef OS_MSGQUEUE_NUM
#define OS_MSGQUEUE_NUM 12
#endif
// <o>Data Storage Memory size [bytes] <0-1073741824:8>
// <i> Defines the combined data storage memory size.
// <i> Applies to objects with system provided memory for data storage.
// <i> Default: 0
#ifndef OS_MSGQUEUE_DATA_SIZE
#define OS_MSGQUEUE_DATA_SIZE 0
#endif
// </e>
// </h>
// Number of Threads which use standard C/C++ library libspace
// (when thread specific memory allocation is not used).
#if (OS_THREAD_OBJ_MEM == 0)
#define OS_THREAD_LIBSPACE_NUM 4
#else
#define OS_THREAD_LIBSPACE_NUM OS_THREAD_NUM
#endif
//------------- <<< end of configuration section >>> ---------------------------
#endif // RTX_CONFIG_H_

View File

@ -0,0 +1,44 @@
/*------------------------------------------------------------------------------
* MDK - Component ::Event Recorder
* Copyright (c) 2016 ARM Germany GmbH. All rights reserved.
*------------------------------------------------------------------------------
* Name: EventRecorderConf.h
* Purpose: Event Recorder Configuration
* Rev.: V1.0.0
*----------------------------------------------------------------------------*/
//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
// <h>Event Recorder
// <o>Number of Records
// <8=>8 <16=>16 <32=>32 <64=>64 <128=>128 <256=>256 <512=>512 <1024=>1024
// <2048=>2048 <4096=>4096 <8192=>8192 <16384=>16384 <32768=>32768
// <65536=>65536 <131072=>131072 <262144=>262144 <524288=>524288
// <1048576=>1048576
// <i>Configure size of Event Record Buffer (each record is 16 bytes)
// <i>Must be 2^n (min=8, max=1048576)
#define EVENT_RECORD_COUNT 1024U
// <o>Time Stamp Source
// <0=> DWT Cycle Counter <1=> SysTick
// <3=> User Timer (Normal Reset) <4=> User Timer (Power-On Reset)
// <i>Selects source for 32-bit time stamp
#define EVENT_TIMESTAMP_SOURCE 0
// <h>SysTick Configuration
// <i>Configure values when Time Stamp Source is set to SysTick
// <o>SysTick Input Clock Frequency [Hz] <1-1000000000>
// <i>Defines SysTick input clock (typical identical with processor clock)
#define SYSTICK_CLOCK 216000000U
// <o>SysTick Interrupt Period [us] <1-1000000000>
// <i>Defines time period of the SysTick timer interrupt
#define SYSTICK_PERIOD_US 1000U
// </h>
// </h>
//------------- <<< end of configuration section >>> ---------------------------

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,485 @@
;******************** (C) COPYRIGHT 2016 STMicroelectronics ********************
;* File Name : startup_stm32f746xx.s
;* Author : MCD Application Team
;* Version : V1.2.0
;* Date : 30-December-2016
;* Description : STM32F746xx devices vector table for MDK-ARM toolchain.
;* This module performs:
;* - Set the initial SP
;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address
;* - Branches to __main in the C library (which eventually
;* calls main()).
;* After Reset the CortexM7 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>
;*******************************************************************************
;
;* Redistribution and use in source and binary forms, with or without modification,
;* are permitted provided that the following conditions are met:
;* 1. Redistributions of source code must retain the above copyright notice,
;* this list of conditions and the following disclaimer.
;* 2. Redistributions in binary form must reproduce the above copyright notice,
;* this list of conditions and the following disclaimer in the documentation
;* and/or other materials provided with the distribution.
;* 3. Neither the name of STMicroelectronics nor the names of its contributors
;* may be used to endorse or promote products derived from this software
;* without specific prior written permission.
;*
;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
; External Interrupts
DCD WWDG_IRQHandler ; Window WatchDog
DCD PVD_IRQHandler ; PVD through EXTI Line detection
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
DCD FLASH_IRQHandler ; FLASH
DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line0
DCD EXTI1_IRQHandler ; EXTI Line1
DCD EXTI2_IRQHandler ; EXTI Line2
DCD EXTI3_IRQHandler ; EXTI Line3
DCD EXTI4_IRQHandler ; EXTI Line4
DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0
DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1
DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2
DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3
DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4
DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5
DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6
DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s
DCD CAN1_TX_IRQHandler ; CAN1 TX
DCD CAN1_RX0_IRQHandler ; CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9
DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10
DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; External Line[15:10]s
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line
DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12
DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13
DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare
DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7
DCD FMC_IRQHandler ; FMC
DCD SDMMC1_IRQHandler ; SDMMC1
DCD TIM5_IRQHandler ; TIM5
DCD SPI3_IRQHandler ; SPI3
DCD UART4_IRQHandler ; UART4
DCD UART5_IRQHandler ; UART5
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
DCD TIM7_IRQHandler ; TIM7
DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0
DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1
DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2
DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3
DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4
DCD ETH_IRQHandler ; Ethernet
DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line
DCD CAN2_TX_IRQHandler ; CAN2 TX
DCD CAN2_RX0_IRQHandler ; CAN2 RX0
DCD CAN2_RX1_IRQHandler ; CAN2 RX1
DCD CAN2_SCE_IRQHandler ; CAN2 SCE
DCD OTG_FS_IRQHandler ; USB OTG FS
DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5
DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6
DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7
DCD USART6_IRQHandler ; USART6
DCD I2C3_EV_IRQHandler ; I2C3 event
DCD I2C3_ER_IRQHandler ; I2C3 error
DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out
DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In
DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI
DCD OTG_HS_IRQHandler ; USB OTG HS
DCD DCMI_IRQHandler ; DCMI
DCD 0 ; Reserved
DCD RNG_IRQHandler ; Rng
DCD FPU_IRQHandler ; FPU
DCD UART7_IRQHandler ; UART7
DCD UART8_IRQHandler ; UART8
DCD SPI4_IRQHandler ; SPI4
DCD SPI5_IRQHandler ; SPI5
DCD SPI6_IRQHandler ; SPI6
DCD SAI1_IRQHandler ; SAI1
DCD LTDC_IRQHandler ; LTDC
DCD LTDC_ER_IRQHandler ; LTDC error
DCD DMA2D_IRQHandler ; DMA2D
DCD SAI2_IRQHandler ; SAI2
DCD QUADSPI_IRQHandler ; QUADSPI
DCD LPTIM1_IRQHandler ; LPTIM1
DCD CEC_IRQHandler ; HDMI_CEC
DCD I2C4_EV_IRQHandler ; I2C4 Event
DCD I2C4_ER_IRQHandler ; I2C4 Error
DCD SPDIF_RX_IRQHandler ; SPDIF_RX
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B .
ENDP
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
MemManage_Handler\
PROC
EXPORT MemManage_Handler [WEAK]
B .
ENDP
BusFault_Handler\
PROC
EXPORT BusFault_Handler [WEAK]
B .
ENDP
UsageFault_Handler\
PROC
EXPORT UsageFault_Handler [WEAK]
B .
ENDP
SVC_Handler PROC
EXPORT SVC_Handler [WEAK]
B .
ENDP
DebugMon_Handler\
PROC
EXPORT DebugMon_Handler [WEAK]
B .
ENDP
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
Default_Handler PROC
EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMP_STAMP_IRQHandler [WEAK]
EXPORT RTC_WKUP_IRQHandler [WEAK]
EXPORT FLASH_IRQHandler [WEAK]
EXPORT RCC_IRQHandler [WEAK]
EXPORT EXTI0_IRQHandler [WEAK]
EXPORT EXTI1_IRQHandler [WEAK]
EXPORT EXTI2_IRQHandler [WEAK]
EXPORT EXTI3_IRQHandler [WEAK]
EXPORT EXTI4_IRQHandler [WEAK]
EXPORT DMA1_Stream0_IRQHandler [WEAK]
EXPORT DMA1_Stream1_IRQHandler [WEAK]
EXPORT DMA1_Stream2_IRQHandler [WEAK]
EXPORT DMA1_Stream3_IRQHandler [WEAK]
EXPORT DMA1_Stream4_IRQHandler [WEAK]
EXPORT DMA1_Stream5_IRQHandler [WEAK]
EXPORT DMA1_Stream6_IRQHandler [WEAK]
EXPORT ADC_IRQHandler [WEAK]
EXPORT CAN1_TX_IRQHandler [WEAK]
EXPORT CAN1_RX0_IRQHandler [WEAK]
EXPORT CAN1_RX1_IRQHandler [WEAK]
EXPORT CAN1_SCE_IRQHandler [WEAK]
EXPORT EXTI9_5_IRQHandler [WEAK]
EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK]
EXPORT TIM1_UP_TIM10_IRQHandler [WEAK]
EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK]
EXPORT TIM1_CC_IRQHandler [WEAK]
EXPORT TIM2_IRQHandler [WEAK]
EXPORT TIM3_IRQHandler [WEAK]
EXPORT TIM4_IRQHandler [WEAK]
EXPORT I2C1_EV_IRQHandler [WEAK]
EXPORT I2C1_ER_IRQHandler [WEAK]
EXPORT I2C2_EV_IRQHandler [WEAK]
EXPORT I2C2_ER_IRQHandler [WEAK]
EXPORT SPI1_IRQHandler [WEAK]
EXPORT SPI2_IRQHandler [WEAK]
EXPORT USART1_IRQHandler [WEAK]
EXPORT USART2_IRQHandler [WEAK]
EXPORT USART3_IRQHandler [WEAK]
EXPORT EXTI15_10_IRQHandler [WEAK]
EXPORT RTC_Alarm_IRQHandler [WEAK]
EXPORT OTG_FS_WKUP_IRQHandler [WEAK]
EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK]
EXPORT TIM8_UP_TIM13_IRQHandler [WEAK]
EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK]
EXPORT TIM8_CC_IRQHandler [WEAK]
EXPORT DMA1_Stream7_IRQHandler [WEAK]
EXPORT FMC_IRQHandler [WEAK]
EXPORT SDMMC1_IRQHandler [WEAK]
EXPORT TIM5_IRQHandler [WEAK]
EXPORT SPI3_IRQHandler [WEAK]
EXPORT UART4_IRQHandler [WEAK]
EXPORT UART5_IRQHandler [WEAK]
EXPORT TIM6_DAC_IRQHandler [WEAK]
EXPORT TIM7_IRQHandler [WEAK]
EXPORT DMA2_Stream0_IRQHandler [WEAK]
EXPORT DMA2_Stream1_IRQHandler [WEAK]
EXPORT DMA2_Stream2_IRQHandler [WEAK]
EXPORT DMA2_Stream3_IRQHandler [WEAK]
EXPORT DMA2_Stream4_IRQHandler [WEAK]
EXPORT ETH_IRQHandler [WEAK]
EXPORT ETH_WKUP_IRQHandler [WEAK]
EXPORT CAN2_TX_IRQHandler [WEAK]
EXPORT CAN2_RX0_IRQHandler [WEAK]
EXPORT CAN2_RX1_IRQHandler [WEAK]
EXPORT CAN2_SCE_IRQHandler [WEAK]
EXPORT OTG_FS_IRQHandler [WEAK]
EXPORT DMA2_Stream5_IRQHandler [WEAK]
EXPORT DMA2_Stream6_IRQHandler [WEAK]
EXPORT DMA2_Stream7_IRQHandler [WEAK]
EXPORT USART6_IRQHandler [WEAK]
EXPORT I2C3_EV_IRQHandler [WEAK]
EXPORT I2C3_ER_IRQHandler [WEAK]
EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK]
EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK]
EXPORT OTG_HS_WKUP_IRQHandler [WEAK]
EXPORT OTG_HS_IRQHandler [WEAK]
EXPORT DCMI_IRQHandler [WEAK]
EXPORT RNG_IRQHandler [WEAK]
EXPORT FPU_IRQHandler [WEAK]
EXPORT UART7_IRQHandler [WEAK]
EXPORT UART8_IRQHandler [WEAK]
EXPORT SPI4_IRQHandler [WEAK]
EXPORT SPI5_IRQHandler [WEAK]
EXPORT SPI6_IRQHandler [WEAK]
EXPORT SAI1_IRQHandler [WEAK]
EXPORT LTDC_IRQHandler [WEAK]
EXPORT LTDC_ER_IRQHandler [WEAK]
EXPORT DMA2D_IRQHandler [WEAK]
EXPORT SAI2_IRQHandler [WEAK]
EXPORT QUADSPI_IRQHandler [WEAK]
EXPORT LPTIM1_IRQHandler [WEAK]
EXPORT CEC_IRQHandler [WEAK]
EXPORT I2C4_EV_IRQHandler [WEAK]
EXPORT I2C4_ER_IRQHandler [WEAK]
EXPORT SPDIF_RX_IRQHandler [WEAK]
WWDG_IRQHandler
PVD_IRQHandler
TAMP_STAMP_IRQHandler
RTC_WKUP_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Stream0_IRQHandler
DMA1_Stream1_IRQHandler
DMA1_Stream2_IRQHandler
DMA1_Stream3_IRQHandler
DMA1_Stream4_IRQHandler
DMA1_Stream5_IRQHandler
DMA1_Stream6_IRQHandler
ADC_IRQHandler
CAN1_TX_IRQHandler
CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_TIM9_IRQHandler
TIM1_UP_TIM10_IRQHandler
TIM1_TRG_COM_TIM11_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTC_Alarm_IRQHandler
OTG_FS_WKUP_IRQHandler
TIM8_BRK_TIM12_IRQHandler
TIM8_UP_TIM13_IRQHandler
TIM8_TRG_COM_TIM14_IRQHandler
TIM8_CC_IRQHandler
DMA1_Stream7_IRQHandler
FMC_IRQHandler
SDMMC1_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_DAC_IRQHandler
TIM7_IRQHandler
DMA2_Stream0_IRQHandler
DMA2_Stream1_IRQHandler
DMA2_Stream2_IRQHandler
DMA2_Stream3_IRQHandler
DMA2_Stream4_IRQHandler
ETH_IRQHandler
ETH_WKUP_IRQHandler
CAN2_TX_IRQHandler
CAN2_RX0_IRQHandler
CAN2_RX1_IRQHandler
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler
DMA2_Stream5_IRQHandler
DMA2_Stream6_IRQHandler
DMA2_Stream7_IRQHandler
USART6_IRQHandler
I2C3_EV_IRQHandler
I2C3_ER_IRQHandler
OTG_HS_EP1_OUT_IRQHandler
OTG_HS_EP1_IN_IRQHandler
OTG_HS_WKUP_IRQHandler
OTG_HS_IRQHandler
DCMI_IRQHandler
RNG_IRQHandler
FPU_IRQHandler
UART7_IRQHandler
UART8_IRQHandler
SPI4_IRQHandler
SPI5_IRQHandler
SPI6_IRQHandler
SAI1_IRQHandler
LTDC_IRQHandler
LTDC_ER_IRQHandler
DMA2D_IRQHandler
SAI2_IRQHandler
QUADSPI_IRQHandler
LPTIM1_IRQHandler
CEC_IRQHandler
I2C4_EV_IRQHandler
I2C4_ER_IRQHandler
SPDIF_RX_IRQHandler
B .
ENDP
ALIGN
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****

View File

@ -0,0 +1,560 @@
/**
******************************************************************************
* @file stm32f7xx_hal_conf.h
* @author MCD Application Team
* @version V1.2.0 modified by ARM
* @date 23-September-2016
* @brief HAL configuration file.
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F7xx_HAL_CONF_H
#define __STM32F7xx_HAL_CONF_H
#ifdef _RTE_
#include "RTE_Components.h" // Component selection
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* ########################## Module Selection ############################## */
/**
* @brief This is the list of modules to be used in the HAL driver
*/
#ifdef RTE_DEVICE_HAL_COMMON
#define HAL_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_ADC
#define HAL_ADC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_CAN
#define HAL_CAN_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_CEC
#define HAL_CEC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_CRC
#define HAL_CRC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_CRYP
#define HAL_CRYP_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DAC
#define HAL_DAC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DCMI
#define HAL_DCMI_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DMA
#define HAL_DMA_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DMA2D
#define HAL_DMA2D_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_ETH
#define HAL_ETH_MODULE_ENABLED
#endif
#if defined (RTE_DEVICE_HAL_FLASH) || defined (RTE_DEVICE_HAL_COMMON)
#define HAL_FLASH_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_NAND
#define HAL_NAND_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_NOR
#define HAL_NOR_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SRAM
#define HAL_SRAM_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SDRAM
#define HAL_SDRAM_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_HASH
#define HAL_HASH_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_GPIO
#define HAL_GPIO_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_I2C
#define HAL_I2C_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_I2S
#define HAL_I2S_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_IWDG
#define HAL_IWDG_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_LPTIM
#define HAL_LPTIM_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_LTDC
#define HAL_LTDC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_PWR
#define HAL_PWR_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_QSPI
#define HAL_QSPI_MODULE_ENABLED
#endif
#if defined RTE_DEVICE_HAL_RCC
#define HAL_RCC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_RNG
#define HAL_RNG_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_RTC
#define HAL_RTC_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SAI
#define HAL_SAI_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SD
#define HAL_SD_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SPDIFRX
#define HAL_SPDIFRX_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SPI
#define HAL_SPI_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_TIM
#define HAL_TIM_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_UART
#define HAL_UART_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_USART
#define HAL_USART_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_IRDA
#define HAL_IRDA_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SMARTCARD
#define HAL_SMARTCARD_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_WWDG
#define HAL_WWDG_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_CORTEX
#define HAL_CORTEX_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_PCD
#define HAL_PCD_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_HCD
#define HAL_HCD_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DFSDM
#define HAL_DFSDM_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_DSI
#define HAL_DSI_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_JPEG
#define HAL_JPEG_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_MDIOS
#define HAL_MDIOS_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_SMBUS
#define HAL_SMBUS_MODULE_ENABLED
#endif
#ifdef RTE_DEVICE_HAL_MMC
#define HAL_MMC_MODULE_ENABLED
#endif
/* ########################## HSE/HSI Values adaptation ##################### */
/**
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
#if !defined (HSE_STARTUP_TIMEOUT)
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal High Speed oscillator (HSI) value.
* This value is used by the RCC HAL module to compute the system frequency
* (when HSI is used as system clock source, directly or through the PLL).
*/
#if !defined (HSI_VALUE)
#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @brief Internal Low Speed oscillator (LSI) value.
*/
#if !defined (LSI_VALUE)
#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature. */
/**
* @brief External Low Speed oscillator (LSE) value.
*/
#if !defined (LSE_VALUE)
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */
#endif /* LSE_VALUE */
#if !defined (LSE_STARTUP_TIMEOUT)
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
#endif /* LSE_STARTUP_TIMEOUT */
/**
* @brief External clock source for I2S peripheral
* This value is used by the I2S HAL module to compute the I2S clock source
* frequency, this source is inserted directly through I2S_CKIN pad.
*/
#if !defined (EXTERNAL_CLOCK_VALUE)
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/
#endif /* EXTERNAL_CLOCK_VALUE */
/* Tip: To avoid modifying this file each time you need to use different HSE,
=== you can define the HSE value in your toolchain compiler preprocessor. */
/* ########################### System Configuration ######################### */
/**
* @brief This is the HAL system configuration section
*/
#define VDD_VALUE 3300U /*!< Value of VDD in mv */
#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */
#define USE_RTOS 0U
#define PREFETCH_ENABLE 1U
#define ART_ACCLERATOR_ENABLE 1U /* To enable instruction cache and prefetch */
/* ########################## Assert Selection ############################## */
/**
* @brief Uncomment the line below to expanse the "assert_param" macro in the
* HAL drivers code
*/
/* #define USE_FULL_ASSERT 1 */
/* ################## Ethernet peripheral configuration ##################### */
/* Section 1 : Ethernet peripheral configuration */
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
#define MAC_ADDR0 2U
#define MAC_ADDR1 0U
#define MAC_ADDR2 0U
#define MAC_ADDR3 0U
#define MAC_ADDR4 0U
#define MAC_ADDR5 0U
/* Definition of the Ethernet driver buffers size and count */
#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */
#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */
#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */
#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */
/* Section 2: PHY configuration section */
/* DP83848 PHY Address*/
#define DP83848_PHY_ADDRESS 0x01U
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
#define PHY_RESET_DELAY 0x000000FFU
/* PHY Configuration delay */
#define PHY_CONFIG_DELAY 0x00000FFFU
#define PHY_READ_TO 0x0000FFFFU
#define PHY_WRITE_TO 0x0000FFFFU
/* Section 3: Common PHY Registers */
#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */
#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */
#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */
#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */
#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */
#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */
#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */
#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */
/* Section 4: Extended PHY Registers */
#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */
#define PHY_MICR ((uint16_t)0x11U) /*!< MII Interrupt Control Register */
#define PHY_MISR ((uint16_t)0x12U) /*!< MII Interrupt Status and Misc. Control Register */
#define PHY_LINK_STATUS ((uint16_t)0x0001U) /*!< PHY Link mask */
#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */
#define PHY_MICR_INT_EN ((uint16_t)0x0002U) /*!< PHY Enable interrupts */
#define PHY_MICR_INT_OE ((uint16_t)0x0001U) /*!< PHY Enable output interrupt events */
#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020U) /*!< Enable Interrupt on change of link status */
#define PHY_LINK_INTERRUPT ((uint16_t)0x2000U) /*!< PHY link status interrupt mask */
/* ################## SPI peripheral configuration ########################## */
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
* Activated: CRC code is present inside driver
* Deactivated: CRC code cleaned from driver
*/
#define USE_SPI_CRC 1U
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_RCC_MODULE_ENABLED
#include "stm32f7xx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
#include "stm32f7xx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_DMA_MODULE_ENABLED
#include "stm32f7xx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
#include "stm32f7xx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
#include "stm32f7xx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_CAN_MODULE_ENABLED
#include "stm32f7xx_hal_can.h"
#endif /* HAL_CAN_MODULE_ENABLED */
#ifdef HAL_CEC_MODULE_ENABLED
#include "stm32f7xx_hal_cec.h"
#endif /* HAL_CEC_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
#include "stm32f7xx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_CRYP_MODULE_ENABLED
#include "stm32f7xx_hal_cryp.h"
#endif /* HAL_CRYP_MODULE_ENABLED */
#ifdef HAL_DMA2D_MODULE_ENABLED
#include "stm32f7xx_hal_dma2d.h"
#endif /* HAL_DMA2D_MODULE_ENABLED */
#ifdef HAL_DAC_MODULE_ENABLED
#include "stm32f7xx_hal_dac.h"
#endif /* HAL_DAC_MODULE_ENABLED */
#ifdef HAL_DCMI_MODULE_ENABLED
#include "stm32f7xx_hal_dcmi.h"
#endif /* HAL_DCMI_MODULE_ENABLED */
#ifdef HAL_ETH_MODULE_ENABLED
#include "stm32f7xx_hal_eth.h"
#endif /* HAL_ETH_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
#include "stm32f7xx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_SRAM_MODULE_ENABLED
#include "stm32f7xx_hal_sram.h"
#endif /* HAL_SRAM_MODULE_ENABLED */
#ifdef HAL_NOR_MODULE_ENABLED
#include "stm32f7xx_hal_nor.h"
#endif /* HAL_NOR_MODULE_ENABLED */
#ifdef HAL_NAND_MODULE_ENABLED
#include "stm32f7xx_hal_nand.h"
#endif /* HAL_NAND_MODULE_ENABLED */
#ifdef HAL_SDRAM_MODULE_ENABLED
#include "stm32f7xx_hal_sdram.h"
#endif /* HAL_SDRAM_MODULE_ENABLED */
#ifdef HAL_HASH_MODULE_ENABLED
#include "stm32f7xx_hal_hash.h"
#endif /* HAL_HASH_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
#include "stm32f7xx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_I2S_MODULE_ENABLED
#include "stm32f7xx_hal_i2s.h"
#endif /* HAL_I2S_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
#include "stm32f7xx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
#include "stm32f7xx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_LTDC_MODULE_ENABLED
#include "stm32f7xx_hal_ltdc.h"
#endif /* HAL_LTDC_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
#include "stm32f7xx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_QSPI_MODULE_ENABLED
#include "stm32f7xx_hal_qspi.h"
#endif /* HAL_QSPI_MODULE_ENABLED */
#ifdef HAL_RNG_MODULE_ENABLED
#include "stm32f7xx_hal_rng.h"
#endif /* HAL_RNG_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
#include "stm32f7xx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SAI_MODULE_ENABLED
#include "stm32f7xx_hal_sai.h"
#endif /* HAL_SAI_MODULE_ENABLED */
#ifdef HAL_SD_MODULE_ENABLED
#include "stm32f7xx_hal_sd.h"
#endif /* HAL_SD_MODULE_ENABLED */
#ifdef HAL_SPDIFRX_MODULE_ENABLED
#include "stm32f7xx_hal_spdifrx.h"
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
#include "stm32f7xx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
#include "stm32f7xx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
#include "stm32f7xx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
#include "stm32f7xx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
#ifdef HAL_IRDA_MODULE_ENABLED
#include "stm32f7xx_hal_irda.h"
#endif /* HAL_IRDA_MODULE_ENABLED */
#ifdef HAL_SMARTCARD_MODULE_ENABLED
#include "stm32f7xx_hal_smartcard.h"
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
#include "stm32f7xx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
#ifdef HAL_PCD_MODULE_ENABLED
#include "stm32f7xx_hal_pcd.h"
#endif /* HAL_PCD_MODULE_ENABLED */
#ifdef HAL_HCD_MODULE_ENABLED
#include "stm32f7xx_hal_hcd.h"
#endif /* HAL_HCD_MODULE_ENABLED */
#ifdef HAL_DFSDM_MODULE_ENABLED
#include "stm32f7xx_hal_dfsdm.h"
#endif /* HAL_DFSDM_MODULE_ENABLED */
#ifdef HAL_DSI_MODULE_ENABLED
#include "stm32f7xx_hal_dsi.h"
#endif /* HAL_DSI_MODULE_ENABLED */
#ifdef HAL_JPEG_MODULE_ENABLED
#include "stm32f7xx_hal_jpeg.h"
#endif /* HAL_JPEG_MODULE_ENABLED */
#ifdef HAL_MDIOS_MODULE_ENABLED
#include "stm32f7xx_hal_mdios.h"
#endif /* HAL_MDIOS_MODULE_ENABLED */
#ifdef HAL_SMBUS_MODULE_ENABLED
#include "stm32f7xx_hal_smbus.h"
#endif /* HAL_SMBUS_MODULE_ENABLED */
#ifdef HAL_MMC_MODULE_ENABLED
#include "stm32f7xx_hal_mmc.h"
#endif /* HAL_MMC_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
}
#endif
#endif /* __STM32F7xx_HAL_CONF_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,280 @@
/**
******************************************************************************
* @file system_stm32f7xx.c
* @author MCD Application Team
* @version V1.2.0
* @date 30-December-2016
* @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
*
* This file provides two functions and one global variable to be called from
* user application:
* - SystemInit(): This function is called at startup just after reset and
* before branch to main program. This call is made inside
* the "startup_stm32f7xx.s" file.
*
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
* by the user application to setup the SysTick
* timer or configure other parameters.
*
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
* be called whenever the core clock is changed
* during program execution.
*
*
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/** @addtogroup CMSIS
* @{
*/
/** @addtogroup stm32f7xx_system
* @{
*/
/** @addtogroup STM32F7xx_System_Private_Includes
* @{
*/
#include "stm32f7xx.h"
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
#endif /* HSE_VALUE */
#if !defined (HSI_VALUE)
#define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_Defines
* @{
*/
/************************* Miscellaneous Configuration ************************/
/*!< Uncomment the following line if you need to relocate your vector Table in
Internal SRAM. */
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
/******************************************************************************/
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_Macros
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_Variables
* @{
*/
/* This variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
Note: If you use this function to configure the system clock; then there
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
uint32_t SystemCoreClock = 16000000;
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F7xx_System_Private_Functions
* @{
*/
/**
* @brief Setup the microcontroller system
* Initialize the Embedded Flash Interface, the PLL and update the
* SystemFrequency variable.
* @param None
* @retval None
*/
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset CFGR register */
RCC->CFGR = 0x00000000;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Disable all interrupts */
RCC->CIR = 0x00000000;
/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}
/**
* @brief Update SystemCoreClock variable according to Clock Register Values.
* The SystemCoreClock variable contains the core clock (HCLK), it can
* be used by the user application to setup the SysTick timer or configure
* other parameters.
*
* @note Each time the core clock (HCLK) changes, this function must be called
* to update SystemCoreClock variable value. Otherwise, any configuration
* based on this variable will be incorrect.
*
* @note - The system frequency computed by this function is not the real
* frequency in the chip. It is calculated based on the predefined
* constant and the selected clock source:
*
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
*
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
*
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
* or HSI_VALUE(*) multiplied/divided by the PLL factors.
*
* (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
* 16 MHz) but the real value may vary depending on the variations
* in voltage and temperature.
*
* (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
* 25 MHz), user has to ensure that HSE_VALUE is same as the real
* frequency of the crystal used. Otherwise, this function may
* have wrong result.
*
* - The result of this function could be not correct when using fractional
* value for HSE crystal.
*
* @param None
* @retval None
*/
void SystemCoreClockUpdate(void)
{
uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & RCC_CFGR_SWS;
switch (tmp)
{
case 0x00: /* HSI used as system clock source */
SystemCoreClock = HSI_VALUE;
break;
case 0x04: /* HSE used as system clock source */
SystemCoreClock = HSE_VALUE;
break;
case 0x08: /* PLL used as system clock source */
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
SYSCLK = PLL_VCO / PLL_P
*/
pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
if (pllsource != 0)
{
/* HSE used as PLL clock source */
pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
}
else
{
/* HSI used as PLL clock source */
pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
}
pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
SystemCoreClock = pllvco/pllp;
break;
default:
SystemCoreClock = HSI_VALUE;
break;
}
/* Compute HCLK frequency --------------------------------------------------*/
/* Get HCLK prescaler */
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
/* HCLK frequency */
SystemCoreClock >>= tmp;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,38 @@
#include "stm32f7xx_hal.h"
#include "clock_216.h"
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Setup system clock to 216MHz
//------------------------------------------------------------------------------
void SystemClock_Config (void) {
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 432;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Activate the OverDrive to reach the 216 MHz Frequency */
HAL_PWREx_EnableOverDrive();
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
}

View File

@ -0,0 +1,17 @@
/************************************************************************//**
* \file clock_216.h
* \brief Function to set the system clock to 216 MHz
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __CLOCK_216_H
#define __CLOCK_216_H
#include <stdint.h>
/************************************************************************//**
* \brief Inits the system clock to 216 MHz
***************************************************************************/
extern void SystemClock_Config (void);
#endif /* __CLOCK_216_H */

View File

@ -0,0 +1,58 @@
#include "stm32f7xx_hal.h"
#include "ext_buttons.h"
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_Buttons_Init (void) {
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
/* Configure GPIO pin: PI2 (BTN_0) */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/* Configure GPIO pin: PI3 (BTN_1) */
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/* Configure GPIO pin: PG7 (BTN_2) */
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/* Configure GPIO pin: PG6 (BTN_3) */
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint32_t Ext_Buttons_GetState (void) {
uint32_t val = 0;
if (HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_2) == GPIO_PIN_RESET) {
val |= 1;
}
if (HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_3) == GPIO_PIN_RESET) {
val |= 2;
}
if (HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_7) == GPIO_PIN_RESET) {
val |= 4;
}
if (HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_6) == GPIO_PIN_RESET) {
val |= 8;
}
return val;
}

View File

@ -0,0 +1,23 @@
/************************************************************************//**
* \file ext_buttons.h
* \brief Function to use the extension uart
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __EXT_BUTTONS_H
#define __EXT_BUTTONS_H
#include <stdint.h>
/************************************************************************//**
* \brief Inits the external buttons usage.
* \return Always #0
***************************************************************************/
extern int32_t Ext_Buttons_Init(void);
/************************************************************************//**
* \brief Reads the buttons status
* \return The binary state of the buttons (example 4 for button 2 pressed).
***************************************************************************/
extern uint32_t Ext_Buttons_GetState(void);
#endif /* __BOARD_BUTTONS_H */

View File

@ -0,0 +1,579 @@
#include "stm32f7xx_hal.h"
#include "ext_keyboard.h"
#define TRUE 1
#define FALSE 0
#define NORMAL 0
#define SHIFT 1
#define CONTROL 2
#define ALT 3
#define TABULATOR 0x09
#define BACKSPACE 0x08
#define ESCAPE 0x1B
#define CR 0x0D
#define F1 0x10
#define F2 0x11
#define F3 0x12
#define F4 0x13
#define F5 0x14
#define F6 0x15
#define F7 0x16
#define F8 0x17
#define F9 0x18
#define F10 0x19
#define F11 0x1A
#define F12 0x1B
static SPI_HandleTypeDef keyboard; // SPI keyboard handle
uint8_t ext_kbChar; // exported to global use
uint8_t scan;
static uint32_t newChar=0; // internal flag
uint8_t release;
uint8_t state;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint8_t ScanCodeAnalyse(uint8_t scan)
{
switch(scan)
{
/*---------------------------------------------------------------------------*/
case 0xF0: release = TRUE; return 0 ; /* release key code */
/*---------------------------------------------------------------------------*/
case 0x14: if (release == FALSE)
state = CONTROL;
else
{
state = NORMAL;
release = FALSE;
}
return 0x00;
/*---------------------------------------------------------------------------*/
case 0x11: if (release == FALSE)
state = ALT;
else
{
state = NORMAL;
release = FALSE;
}
return 0x00;
/*---------------------------------------------------------------------------*/
case 0x12:
case 0x58:
case 0x59: if (release == FALSE)
state = SHIFT;
else
{
state = NORMAL;
release = FALSE;
}
return 0x00;
}
/*---------------------------------------------------------------------------*/
if (release == TRUE)
{
release = FALSE;
return 0x00;
}
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
switch(scan)
{
/*---------------------------------------------------------------------------*/
case 0x05: return F1; // 'F1' to 'F12'
/*---------------------------------------------------------------------------*/
case 0x06: return F2;
/*---------------------------------------------------------------------------*/
case 0x04: return F3;
/*---------------------------------------------------------------------------*/
case 0x0c: return F4;
/*---------------------------------------------------------------------------*/
case 0x03: return F5;
/*---------------------------------------------------------------------------*/
case 0x0B: return F6;
/*---------------------------------------------------------------------------*/
case 0x83: return F7;
/*---------------------------------------------------------------------------*/
case 0x0A: return F8;
/*---------------------------------------------------------------------------*/
case 0x01: return F9;
/*---------------------------------------------------------------------------*/
case 0x09: return F10;
/*---------------------------------------------------------------------------*/
case 0x78: return F11;
/*---------------------------------------------------------------------------*/
case 0x07: return F12;
/*---------------------------------------------------------------------------*/
case 0x16: switch (state) /* key '1' */
{
case NORMAL : return '1';
case CONTROL : return 0;
case SHIFT : return '!';
}
/*---------------------------------------------------------------------------*/
case 0x1E: switch (state) /* key '2' */
{
case NORMAL : return '2';
case CONTROL : return 0;
case SHIFT : return '@';
}
/*---------------------------------------------------------------------------*/
case 0x26: switch (state) /* key '3' */
{
case NORMAL : return '3';
case CONTROL : return 0;
case SHIFT : return '#';
}
/*---------------------------------------------------------------------------*/
case 0x25: switch (state) /* key '4' */
{
case NORMAL : return '4';
case CONTROL : return 0;
case SHIFT : return '$';
}
/*---------------------------------------------------------------------------*/
case 0x2E: switch (state) /* key '5' */
{
case NORMAL : return '5';
case CONTROL : return 0;
case SHIFT : return '%';
}
/*---------------------------------------------------------------------------*/
case 0x36: switch (state) /* key '6' */
{
case NORMAL : return '6';
case CONTROL : return 0;
case SHIFT : return '^';
}
/*---------------------------------------------------------------------------*/
case 0x6C:
case 0x3D: switch (state) /* key '7' */
{
case NORMAL : return '7';
case CONTROL : return 0;
case SHIFT : return '&';
}
/*---------------------------------------------------------------------------*/
case 0x75:
case 0x3E: switch (state) /* key '8' */
{
case NORMAL : return '8';
case CONTROL : return 0;
case SHIFT : return '*';
}
/*---------------------------------------------------------------------------*/
case 0x7D:
case 0x46: switch (state) /* key '9' */
{
case NORMAL : return '9';
case CONTROL : return 0;
case SHIFT : return '(';
}
/*---------------------------------------------------------------------------*/
case 0x7C:
case 0x45: switch (state) /* key '0' */
{
case NORMAL : return '0';
case CONTROL : return 0;
case SHIFT : return ')';
}
/*---------------------------------------------------------------------------*/
case 0x7E: switch (state) /* key '*' */
{
case NORMAL : return '*';
case CONTROL : return F11;
case SHIFT : return '?';
default : return 0xBF; /* ? vertical flipped */
}
/*---------------------------------------------------------------------------*/
case 0x4E: switch (state) /* key '-' */
{
case NORMAL : return '-';
case CONTROL : return 0;
case SHIFT : return '_';
default : return 0x00;
}
/*---------------------------------------------------------------------------*/
case 0x65: return 0x1B; /* End button -> Escape command */
/*---------------------------------------------------------------------------*/
case 0x15: switch (state) /* key 'Q' */
{
case SHIFT : return 'Q';
case CONTROL : return 0x11;
default : return 'q';
}
/*---------------------------------------------------------------------------*/
case 0x1D: switch (state) /* key 'W' */
{
case SHIFT : return 'W';
case CONTROL : return 0x17;
default : return 'w';
}
/*---------------------------------------------------------------------------*/
case 0x24: switch (state) /* key 'E' */
{
case SHIFT : return 'E';
case CONTROL : return 0x05;
default : return 'e';
}
/*---------------------------------------------------------------------------*/
case 0x2D: switch (state) /* key 'R' */
{
case SHIFT : return 'R';
case CONTROL : return 0x12;
default : return 'r';
}
/*---------------------------------------------------------------------------*/
case 0x2C: switch (state) /* key 'T' */
{
case SHIFT : return 'T';
case CONTROL : return 0x14;
default : return 't';
}
/*---------------------------------------------------------------------------*/
case 0x35: switch (state) /* key 'Z' */
{
case SHIFT : return 'Y';
case CONTROL : return 0x1A;
default : return 'y';
}
/*---------------------------------------------------------------------------*/
case 0x6B:
case 0x3C: switch (state) /* key 'U' */
{
case SHIFT : return 'U';
case CONTROL : return 0x15;
default : return 'u';
}
/*---------------------------------------------------------------------------*/
case 0x73:
case 0x43: switch (state) /* key 'I' */
{
case SHIFT : return 'I';
case CONTROL : return 0x09;
default : return 'i';
}
/*---------------------------------------------------------------------------*/
case 0x74:
case 0x44: switch (state) /* key 'O' */
{
case SHIFT : return 'O';
case CONTROL : return 0x0F;
default : return 'o';
}
/*---------------------------------------------------------------------------*/
case 0x7B:
case 0x4D: switch (state) /* key 'P' */
{
case SHIFT : return 'P';
case CONTROL : return 0x10;
default : return 'p';
}
/*---------------------------------------------------------------------------*/
case 0x5B: switch (state) /* key 'è' */
{
case SHIFT : return '}';
case ALT : return 0;
default : return ']';
}
/*---------------------------------------------------------------------------*/
case 0x66: return 0x08; /* Backspace */
/*---------------------------------------------------------------------------*/
case 0x0D: return 0x09; /* Horizontal tabulator */
/*---------------------------------------------------------------------------*/
case 0x1C: switch (state) /* key 'A' */
{
case SHIFT : return 'A';
case CONTROL : return 0x01;
default : return 'a';
}
/*---------------------------------------------------------------------------*/
case 0x1B: switch (state) /* key 'S' */
{
case SHIFT : return 'S';
case CONTROL : return 0x13;
default : return 's';
}
/*---------------------------------------------------------------------------*/
case 0x23: switch (state) /* key 'D' */
{
case SHIFT : return 'D';
case CONTROL : return 0x04;
default : return 'd';
}
/*---------------------------------------------------------------------------*/
case 0x2B: switch (state) /* key 'F' */
{
case SHIFT : return 'F';
case CONTROL : return 0x06;
default : return 'f';
}
/*---------------------------------------------------------------------------*/
case 0x34: switch (state) /* key 'G' */
{
case SHIFT : return 'G';
case CONTROL : return 0x07;
default : return 'g';
}
/*---------------------------------------------------------------------------*/
case 0x33: switch (state) /* key 'H' */
{
case SHIFT : return 'H';
case CONTROL : return 0x08;
default : return 'h';
}
/*---------------------------------------------------------------------------*/
case 0x69:
case 0x3B: switch (state) /* key 'J' */
{
case SHIFT : return 'J';
case CONTROL : return 0x0A;
default : return 'j';
}
/*---------------------------------------------------------------------------*/
case 0x72:
case 0x42: switch (state) /* key 'K' */
{
case SHIFT : return 'K';
case CONTROL : return 0x0B;
default : return 'k';
}
/*---------------------------------------------------------------------------*/
case 0x7A:
case 0x4B: switch (state) /* key 'L' */
{
case SHIFT : return 'L';
case CONTROL : return 0x0C;
default : return 'l';
}
/*---------------------------------------------------------------------------*/
case 0x54: switch (state) /* key '[' */
{
case SHIFT : return '{';
case ALT : return 0; /* beta symbol */
default : return '[';
}
/*---------------------------------------------------------------------------*/
case 0x52: switch (state) /* key ''' */
{
case SHIFT : return '"';
case ALT : return 0;
default : return 0x27;
}
/*---------------------------------------------------------------------------*/
case 0x1A: switch (state) /* key 'Y' */
{
case SHIFT : return 'Z';
case CONTROL : return 0x19;
default : return 'z';
}
/*---------------------------------------------------------------------------*/
case 0x22: switch (state) /* key 'X' */
{
case SHIFT : return 'X';
case CONTROL : return 0x18;
default : return 'x';
}
/*---------------------------------------------------------------------------*/
case 0x21: switch (state) /* key 'C' */
{
case SHIFT : return 'C';
case CONTROL : return 0x03;
default : return 'c';
}
/*---------------------------------------------------------------------------*/
case 0x2A: switch (state) /* key 'V' */
{
case SHIFT : return 'V';
case CONTROL : return 0x16;
default : return 'v';
}
/*---------------------------------------------------------------------------*/
case 0x32: switch (state) /* key 'B' */
{
case SHIFT : return 'B';
case CONTROL : return 0x02;
default : return 'b';
}
/*---------------------------------------------------------------------------*/
case 0x31: switch (state) /* key 'N' */
{
case SHIFT : return 'N';
case CONTROL : return 0x0E;
default : return 'n';
}
/*---------------------------------------------------------------------------*/
case 0x70:
case 0x3A: switch (state) /* key 'M' */
{
case SHIFT : return 'M';
case CONTROL : return 0x0D;
default : return 'm';
}
/*---------------------------------------------------------------------------*/
case 0x41: switch (state) /* key ',' */
{
case SHIFT : return '<';
default : return ',';
}
/*---------------------------------------------------------------------------*/
case 0x49: switch (state) /* key '.' */
{
case SHIFT : return '>';
default : return '.';
}
/*---------------------------------------------------------------------------*/
case 0x5A: return 0x0D; /* Carriage return (Enter) */
/*---------------------------------------------------------------------------*/
case 0x29: return ' '; /* Spacebar */
/*---------------------------------------------------------------------------*/
case 0x63: switch (state) /* key 'UP ARROW' */
{
case SHIFT : return 'U';
default : return 'u';
}
/*---------------------------------------------------------------------------*/
case 0x60: switch (state) /* key 'DOWN ARROW' */
{
case SHIFT : return 'D';
default : return 'd';
}
/*---------------------------------------------------------------------------*/
case 0x61: switch (state) /* key 'LEFT ARROW' */
{
case SHIFT : return 'L';
default : return 'l';
}
/*---------------------------------------------------------------------------*/
case 0x6A: switch (state) /* key 'RIGHT ARROW' */
{
case SHIFT : return 'R';
default : return 'r';
}
/*---------------------------------------------------------------------------*/
case 0x0E: switch (state) /* key 'apostroph' */
{
case SHIFT : return '~';
default : return '`';
}
/*---------------------------------------------------------------------------*/
case 0x79:
case 0x4C: switch (state) /* key ';' */
{
case SHIFT : return ':';
default : return ';';
}
/*---------------------------------------------------------------------------*/
case 0x4A: switch (state) /* key '/' */
{
case SHIFT : return '?';
default : return '/';
}
/*---------------------------------------------------------------------------*/
case 0x5D: switch (state) /* key '\' */
{
case SHIFT : return '|';
default : return '\\';
}
/*---------------------------------------------------------------------------*/
case 0x55: switch (state) /* key '=' */
{
case SHIFT : return '+';
default : return '=';
}
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void EXTI9_5_IRQHandler(void)
{
// read keyboard data and store it on global variable
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET); // SPI CS activate
HAL_SPI_Receive(&keyboard,&scan,1,100); // SPI read
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET); // SPI CS desactivate
// process irq
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8); // clear irq and callback
ext_kbChar = ScanCodeAnalyse(scan);
if(ext_kbChar != 0)
{
newChar = 1;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Ext_Keyboard_Init(void)
{
volatile uint8_t dummy;
GPIO_InitTypeDef GPIO_InitStruct;
/* Peripheral clock enable */
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_SPI2_CLK_ENABLE();
/**SPI2 GPIO Configuration
PI1 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PI0 ------> /SPI_CB_SS
PF8 ------> /SPI_INT
*/
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
keyboard.Instance = SPI2;
keyboard.Init.Mode = SPI_MODE_MASTER;
keyboard.Init.Direction = SPI_DIRECTION_2LINES;
keyboard.Init.DataSize = SPI_DATASIZE_8BIT;
keyboard.Init.CLKPolarity = SPI_POLARITY_HIGH;
keyboard.Init.CLKPhase = SPI_PHASE_1EDGE;
keyboard.Init.NSS = SPI_NSS_SOFT;
keyboard.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; //3.333MHz -> (Fosc/4) / 16
keyboard.Init.FirstBit = SPI_FIRSTBIT_MSB;
keyboard.Init.TIMode = SPI_TIMODE_DISABLE;
keyboard.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
keyboard.Init.CRCPolynomial = 7;
keyboard.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
keyboard.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
HAL_SPI_Init(&keyboard);
// dummy read to clear any glitch
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_SPI_Receive(&keyboard,(uint8_t *)&dummy,1,10);
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
// enable interrupts on keyboard ISR
HAL_NVIC_SetPriority(EXTI9_5_IRQn,5,5);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint8_t Ext_Keyboard_Read(void)
{
while(newChar == 0) // wait new char coming
{}
newChar = 0; // clear it
return ext_kbChar; // return read char
}

View File

@ -0,0 +1,53 @@
/************************************************************************//**
* \file ext_keyboard.h
* \brief Function to use the extension keyboard
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __EXT_KEYBOARD_H
#define __EXT_KEYBOARD_H
#include <stdint.h>
#include "stm32f7xx_hal.h"
extern uint8_t ext_kbChar;
/************************************************************************//**
* \brief Inits the extension keyboard
* The extension keyboard use interrupt from keyboard (PF8)
*
* Read keyboard non blocking (interrupt):
* ---------------------------------------
* To read the keyboard, the callback function HAL_GPIO_EXTI_Callback has
* to be implemented.
* the example below send the keyboard char to the serial port
* void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
* {
* if(GPIO_Pin == GPIO_PIN_8)
* {
* HAL_UART_Transmit(&ext_uart, &ext_kbChar, 1,100);;
* }
* }
* Read keyboard blocking (pooling until key pressed):
* ---------------------------------------------------
* The functions below have to be used:
* pressed = Ext_Keyboard_Read();
*
* \warning The external interrupts (5,6,7,9) have to be implemented
* in the ext_keyboard.c file because they share the same processor irq
* EXTI9_5_IRQHandler.
***************************************************************************/
void Ext_Keyboard_Init(void);
/************************************************************************//**
* \brief Read the pressed key on extension keyboard
* \return The ASCII code of key pressed.
*
* \warning This function is blocking until a char is received
***************************************************************************/
uint8_t Ext_Keyboard_Read(void);
#endif /* __BOARD_LED_H */

224
RTE/Hesso_pack/ext_led.c Normal file
View File

@ -0,0 +1,224 @@
#include "stm32f7xx_hal.h"
#include "ext_led.h"
#include <stdint.h>
//------------------------------------------------------------------------------
static const uint8_t cie1931[101] =
{
0, 0, 1, 1, 1, 1, 2, 2, 2, 3,
3, 3, 4, 4, 4, 5, 5, 6, 6, 7,
8, 8, 9, 10, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 22, 23, 24, 26, 27,
29, 30, 32, 34, 35, 37, 39, 41, 43, 45,
47, 49, 51, 54, 56, 58, 61, 64, 66, 69,
72, 75, 78, 81, 84, 87, 90, 93, 97, 100,
104, 108, 111, 115, 119, 123, 127, 131, 136, 140,
145, 149, 154, 159, 163, 168, 173, 179, 184, 189,
195, 200, 206, 212, 217, 223, 230, 236, 242, 248,
255,
};
#if LIGHTNESS_PWM_STEP != 100
#error this cie1931 array supports only 100 steps, feel free to implement your own
#endif
//------------------------------------------------------------------------------
uint8_t lightness_to_pwm(uint8_t percentage)
{
if(percentage > (LIGHTNESS_PWM_STEP-1))
percentage = (LIGHTNESS_PWM_STEP-1);
return cie1931[percentage];
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_LED_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
//----------------------------------------------------------------------------
// Configure GPIO pin: PA15 (LED0)
__HAL_RCC_GPIOA_CLK_ENABLE(); // enable GPIO timer
__HAL_RCC_TIM2_CLK_ENABLE(); // enable timer 2 clock
GPIO_InitStruct.Pin = GPIO_PIN_15; // used pin is PA15
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;// timer 2 is used
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
TIM2->CCER = TIM_CCER_CC1E; // compare for PWM usage
TIM2->PSC = 16; // timer prescaler
TIM2->ARR = 255; // max count value
TIM2->CCR1 = lightness_to_pwm(0); // duty cycle
TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
TIM2->EGR |= TIM_EGR_UG; // update register now
TIM2->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
//----------------------------------------------------------------------------
// Configure GPIO pin: PH6 (LED1)
__HAL_RCC_GPIOH_CLK_ENABLE(); // enable GPIO timer
__HAL_RCC_TIM12_CLK_ENABLE(); // enable timer 12 clock
GPIO_InitStruct.Pin = GPIO_PIN_6; // used pin is PH6
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
GPIO_InitStruct.Alternate = GPIO_AF9_TIM12;// timer 12 is used
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
TIM12->CCER = TIM_CCER_CC1E; // compare for PWM usage
TIM12->PSC = 16; // timer prescaler
TIM12->ARR = 255; // max count value
TIM12->CCR1 = lightness_to_pwm(0); // duty cycle
TIM12->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
TIM12->EGR |= TIM_EGR_UG; // update register now
TIM12->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
//----------------------------------------------------------------------------
// Configure GPIO pin: PA8 (LED2)
__HAL_RCC_GPIOA_CLK_ENABLE(); // enable GPIO timer
__HAL_RCC_TIM1_CLK_ENABLE(); // enable timer 1 clock
GPIO_InitStruct.Pin = GPIO_PIN_8; // used pin is PA8
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;// timer 5 is used
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
TIM1->CCER = TIM_CCER_CC1E; // compare for PWM usage
TIM1->PSC = 16; // timer prescaler
TIM1->ARR = 255; // max count value
TIM1->CCR1 = lightness_to_pwm(0); // duty cycle
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
TIM1->EGR |= TIM_EGR_UG; // update register now
TIM1->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
TIM1->BDTR = TIM_BDTR_MOE; // master output enable
//----------------------------------------------------------------------------
// Configure GPIO pin: PB4 (LED3)
__HAL_RCC_GPIOB_CLK_ENABLE(); // enable GPIO timer
__HAL_RCC_TIM3_CLK_ENABLE(); // enable timer 3 clock
GPIO_InitStruct.Pin = GPIO_PIN_4; // used pin is PB4
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;// timer 3 is used
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
TIM3->CCER = TIM_CCER_CC1E; // compare for PWM usage
TIM3->PSC = 16; // timer prescaler
TIM3->ARR = 255; // max count value
TIM3->CCR1 = lightness_to_pwm(0); // duty cycle
TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
TIM3->EGR |= TIM_EGR_UG; // update register now
TIM3->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_LED_On (uint32_t num) {
if((num & 1) != 0)
{
TIM2->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
if((num & 2) != 0)
{
TIM12->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
if((num & 4) != 0)
{
TIM1->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
if((num & 8) != 0)
{
TIM3->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_LED_Off (uint32_t num) {
if((num & 1) != 0)
{
TIM2->CCR1 = lightness_to_pwm(0);
}
if((num & 2) != 0)
{
TIM12->CCR1 = lightness_to_pwm(0);
}
if((num & 4) != 0)
{
TIM1->CCR1 = lightness_to_pwm(0);
}
if((num & 8) != 0)
{
TIM3->CCR1 = lightness_to_pwm(0);
}
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_LED_PWM (uint32_t num, uint32_t duty) {
if((num & 1) != 0)
{
TIM2->CCR1 = lightness_to_pwm(duty);
}
if((num & 2) != 0)
{
TIM12->CCR1 = lightness_to_pwm(duty);
}
if((num & 4) != 0)
{
TIM1->CCR1 = lightness_to_pwm(duty);
}
if((num & 8) != 0)
{
TIM3->CCR1 = lightness_to_pwm(duty);
}
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int32_t Ext_LEDs(uint32_t num) {
if((num & 1) != 0)
{
TIM2->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
else
{
TIM2->CCR1 = lightness_to_pwm(0);
}
if((num & 2) != 0)
{
TIM12->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
else
{
TIM12->CCR1 = lightness_to_pwm(0);
}
if((num & 4) != 0)
{
TIM1->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
else
{
TIM1->CCR1 = lightness_to_pwm(0);
}
if((num & 8) != 0)
{
TIM3->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
}
else
{
TIM3->CCR1 = lightness_to_pwm(0);
}
return 0;
}

51
RTE/Hesso_pack/ext_led.h Normal file
View File

@ -0,0 +1,51 @@
/************************************************************************//**
* \file ext_led.h
* \brief Function to use the extension LEDs
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __EXT_LED_H
#define __EXT_LED_H
#include <stdint.h>
#define LIGHTNESS_PWM_STEP 100
/************************************************************************//**
* \brief Inits the external Leds usage.
* \return Always #0
***************************************************************************/
extern int32_t Ext_LED_Init (void);
/************************************************************************//**
* \brief Turn on one led.
* \param num The led to turn on (1,2,4,8)
* \return Always 0
***************************************************************************/
extern int32_t Ext_LED_On (uint32_t num);
/************************************************************************//**
* \brief Turn off one led.
* \param num The led to turn off (1,2,4,8)
* \return Always 0
***************************************************************************/
extern int32_t Ext_LED_Off (uint32_t num);
/************************************************************************//**
* \brief Set a power on a led.
* \param num The led to turn set the power (1,2,4,8)
* \param duty The power of the led (0 to 255)
* \return Always 0
***************************************************************************/
extern int32_t Ext_LED_PWM (uint32_t num, uint32_t duty);
/************************************************************************//**
* \brief Set the state on all leds.
* \param val The binary state of the four leds (example 0b1101).
* \return Always 0
***************************************************************************/
extern int32_t Ext_LEDs(uint32_t val);
#endif /* __BOARD_LED_H */

57
RTE/Hesso_pack/ext_uart.c Normal file
View File

@ -0,0 +1,57 @@
#include "stm32f7xx_hal.h"
#include "ext_uart.h"
UART_HandleTypeDef ext_uart; // extension uart handler
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(huart->Instance==USART6)
{
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_USART6_CLK_ENABLE();
/**USART6 GPIO Configuration
PC7 ------> USART6_RX
PC6 ------> USART6_TX
*/
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Ext_UART_Init(uint32_t speed)
{
ext_uart.Instance = USART6;
ext_uart.Init.BaudRate = speed;
ext_uart.Init.WordLength = UART_WORDLENGTH_8B;
ext_uart.Init.StopBits = UART_STOPBITS_1;
ext_uart.Init.Parity = UART_PARITY_NONE;
ext_uart.Init.Mode = UART_MODE_TX_RX;
ext_uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
ext_uart.Init.OverSampling = UART_OVERSAMPLING_16;
ext_uart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
ext_uart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
HAL_UART_Init(&ext_uart);
/* USART6 interrupt Init */
HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART6_IRQn);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void USART6_IRQHandler(void)
{
HAL_UART_IRQHandler(&ext_uart);
}

44
RTE/Hesso_pack/ext_uart.h Normal file
View File

@ -0,0 +1,44 @@
/************************************************************************//**
* \file ext_uart.h
* \brief Function to use the extension uart
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __EXT_UART_H
#define __EXT_UART_H
#include <stdint.h>
#include "stm32f7xx_hal.h"
extern UART_HandleTypeDef ext_uart; // extension uart handle
/************************************************************************//**
* \brief Inits the extension uart
* \param speed This si the uart speed selected for example 115200.
* The extension uart could be use with or without interrupts.
*
* Without interrupts:
* -------------------
* To send something on the uart, you have to use HAL_UART_Transmit function
* as the example below.
* error = HAL_UART_Transmit(&ext_uart, msg, sizeof(msg),50);
* To receive you have to use HAL_UART_Receive as example below.
* error = HAL_UART_Receive(&ext_uart, msg, sizeof(msg),HAL_MAX_DELAY);
* The HAL_MAX_DELAY waits until receive is finished.
*
* With interrupts:
* ----------------
* The functions below have to be used:
* HAL_UART_Transmit_IT(&ext_uart," Welcome\n\r", 10);
* HAL_UART_Receive_IT(&ext_uart,data,8);
*
* The callback functions above could be implemented for usage on interrupt
* mode when the full size is transmitted (or received).
* void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
* void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
*
***************************************************************************/
extern void Ext_UART_Init(uint32_t speed);
#endif /* __BOARD_LED_H */

View File

@ -0,0 +1,61 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'tokenring_project'
* Target: 'Target 1'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32f7xx.h"
/* ARM::CMSIS:RTOS2:Keil RTX5:Source:5.5.4 */
#define RTE_CMSIS_RTOS2 /* CMSIS-RTOS2 */
#define RTE_CMSIS_RTOS2_RTX5 /* CMSIS-RTOS2 Keil RTX5 */
#define RTE_CMSIS_RTOS2_RTX5_SOURCE /* CMSIS-RTOS2 Keil RTX5 Source */
/* Keil.ARM Compiler::Compiler:Event Recorder:DAP:1.5.1 */
#define RTE_Compiler_EventRecorder
#define RTE_Compiler_EventRecorder_DAP
/* Keil.ARM Compiler::Compiler:I/O:STDOUT:ITM:1.2.0 */
#define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */
#define RTE_Compiler_IO_STDOUT_ITM /* Compiler I/O: STDOUT ITM */
/* Keil::CMSIS Driver:I2C:1.9.0 */
#define RTE_Drivers_I2C1 /* Driver I2C1 */
#define RTE_Drivers_I2C2 /* Driver I2C2 */
#define RTE_Drivers_I2C3 /* Driver I2C3 */
#define RTE_Drivers_I2C4 /* Driver I2C4 */
/* Keil::CMSIS Driver:SAI:1.5.0 */
#define RTE_Drivers_SAI1 /* Driver SAI1 */
#define RTE_Drivers_SAI2 /* Driver SAI2 */
/* Keil::Device:STM32Cube Framework:Classic:1.2.7 */
#define RTE_DEVICE_FRAMEWORK_CLASSIC
/* Keil::Device:STM32Cube HAL:Common:1.2.7 */
#define RTE_DEVICE_HAL_COMMON
/* Keil::Device:STM32Cube HAL:Cortex:1.2.7 */
#define RTE_DEVICE_HAL_CORTEX
/* Keil::Device:STM32Cube HAL:DMA:1.2.7 */
#define RTE_DEVICE_HAL_DMA
/* Keil::Device:STM32Cube HAL:GPIO:1.2.7 */
#define RTE_DEVICE_HAL_GPIO
/* Keil::Device:STM32Cube HAL:PWR:1.2.7 */
#define RTE_DEVICE_HAL_PWR
/* Keil::Device:STM32Cube HAL:RCC:1.2.7 */
#define RTE_DEVICE_HAL_RCC
/* Keil::Device:STM32Cube HAL:SDRAM:1.2.7 */
#define RTE_DEVICE_HAL_SDRAM
/* Keil::Device:STM32Cube HAL:SPI:1.2.7 */
#define RTE_DEVICE_HAL_SPI
/* Keil::Device:STM32Cube HAL:UART:1.2.7 */
#define RTE_DEVICE_HAL_UART
/* Keil::Device:Startup:1.2.4 */
#define RTE_DEVICE_STARTUP_STM32F7XX /* Device Startup for STM32F7 */
#endif /* RTE_COMPONENTS_H */

473
RTE/uGFX_library/gfxconf.h Normal file
View File

@ -0,0 +1,473 @@
/**
* This file has a different license to the rest of the uGFX system.
* You can copy, modify and distribute this file as you see fit.
* You do not need to publish your source modifications to this file.
* The only thing you are not permitted to do is to relicense it
* under a different license.
*/
/**
* Copy this file into your project directory and rename it as gfxconf.h
* Edit your copy to turn on the uGFX features you want to use.
* The values below are the defaults.
*
* Only remove the comments from lines where you want to change the
* default value. This allows definitions to be included from
* driver makefiles when required and provides the best future
* compatibility for your project.
*
* Please use spaces instead of tabs in this file.
*/
//* <<< Use Configuration Wizard in Context Menu >>>
#ifndef _GFXCONF_H
#define _GFXCONF_H
//<h> uGFX configuration with RTX5 operating system.
//<i> Full documentation available at: https://wiki.ugfx.io
#define CONF_WIZ_OS 1
///////////////////////////////////////////////////////////////////////////
// GOS - One of these must be defined, preferably in your Makefile //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_OS_CHIBIOS FALSE
//#define GFX_USE_OS_FREERTOS FALSE
// #define GFX_FREERTOS_USE_TRACE FALSE
//#define GFX_USE_OS_WIN32 FALSE
//#define GFX_USE_OS_LINUX FALSE
//#define GFX_USE_OS_OSX FALSE
//#define GFX_USE_OS_ECOS FALSE
//#define GFX_USE_OS_RAWRTOS TRUE
//#define GFX_USE_OS_ARDUINO FALSE
//#define GFX_USE_OS_KEIL TRUE
//#define GFX_USE_OS_CMSIS FALSE
//#define GFX_USE_OS_CMSIS2 FALSE
#if CONF_WIZ_OS == 0
#define GFX_USE_OS_RAW32 TRUE
#define GFX_USE_OS_RTX5 FALSE
#define GFX_OS_PRE_INIT_FUNCTION Raw32OSInit
#define GFX_OS_INIT_NO_WARNING TRUE
#else
#define GFX_USE_OS_RAW32 FALSE
#define GFX_USE_OS_RTX5 TRUE
#define GFX_OS_INIT_NO_WARNING TRUE
#endif
//#define GFX_USE_OS_ZEPHYR FALSE
//#define GFX_USE_OS_NIOS FALSE
//#define GFX_USE_OS_QT FALSE
// #define INTERRUPTS_OFF() optional_code
// #define INTERRUPTS_ON() optional_code
// Options that (should where relevant) apply to all operating systems
// #define GFX_NO_INLINE FALSE
#define GFX_COMPILER GFX_COMPILER_KEIL
// #define GFX_SHOW_COMPILER FALSE
#define GFX_CPU GFX_CPU_CORTEX_M7
// #define GFX_CPU_NO_ALIGNMENT_FAULTS FALSE
// #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN
//<o> GFX heap size (in bytes), min. 32000
#define GFX_OS_HEAP_SIZE 60000
#define GFX_OS_NO_INIT TRUE
// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine
// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine
// #define GFX_OS_CALL_UGFXMAIN FALSE
// #define GFX_OS_UGFXMAIN_STACKSIZE 0
// #define GFX_EMULATE_MALLOC FALSE
//<o> LCD orientartion <0=> Board orientation
// <90=> 90 degree rotate
// <180=> 180 degree rotate (default laboratory)
// <270=> 270 degree rotate
#define GDISP_DEFAULT_ORIENTATION 180 // If not defined the native hardware orientation is used.
///////////////////////////////////////////////////////////////////////////
// GDISP //
///////////////////////////////////////////////////////////////////////////
// <e> GDISP configuration
#define GFX_USE_GDISP 1
#define GDISP_NEED_CONTROL 1 // always because LCD is 180 degree
//<q> Use of draw circle functions
#define GDISP_NEED_CIRCLE 1
//<q> Use of draw circle into circle
#define GDISP_NEED_DUALCIRCLE 0
//<q> Use of draw ellipse functions
#define GDISP_NEED_ELLIPSE 0
//<q> Use of draw arc functions
#define GDISP_NEED_ARC 0
//<q> Use of draw arc sectors functions
#define GDISP_NEED_ARCSECTORS 0
//<q> Use of draw convex polygon functions
#define GDISP_NEED_CONVEX_POLYGON 0
//<q> Use of scrolling functions
#define GDISP_NEED_SCROLL 0
//<q> Use of read pixel functions
#define GDISP_NEED_PIXELREAD 1
//#define GDISP_NEED_QUERY FALSE
#define GDISP_NEED_MULTITHREAD 1
//#define GDISP_NEED_STREAMING FALSE
//#define GDISP_NEED_AUTOFLUSH FALSE
//#define GDISP_NEED_TIMERFLUSH FALSE
//<q> Control LCD boundaries
#define GDISP_NEED_VALIDATION 0
#define GDISP_NEED_CLIP TRUE
// <e> Text usage
#define GDISP_NEED_TEXT 1
//<q> Text word wrap
#define GDISP_NEED_TEXT_WORDWRAP 1
// #define GDISP_NEED_TEXT_BOXPADLR 1
// #define GDISP_NEED_TEXT_BOXPADTB 1
//<q> Text antialiasing
#define GDISP_NEED_ANTIALIAS 1
//<q> Text UTF8
#define GDISP_NEED_UTF8 1
//<q> Text kerning
#define GDISP_NEED_TEXT_KERNING 1
// <e> Fonts (use one at least)
#define FOR_CONF_WIZARD 1
//<q> Font ui1
#define GDISP_INCLUDE_FONT_UI1 0
//<q> Font ui2
#define GDISP_INCLUDE_FONT_UI2 1 // The smallest preferred font.
//<q> Font Largenumbers
#define GDISP_INCLUDE_FONT_LARGENUMBERS 0
//<q> Font DejaVuSans10
#define GDISP_INCLUDE_FONT_DEJAVUSANS10 0
//<q> Font DejaVuSans12
#define GDISP_INCLUDE_FONT_DEJAVUSANS12 0
//<q> Font DejaVuSans16
#define GDISP_INCLUDE_FONT_DEJAVUSANS16 0
//<q> Font DejaVuSans20
#define GDISP_INCLUDE_FONT_DEJAVUSANS20 0
//<q> Font DejaVuSans24
#define GDISP_INCLUDE_FONT_DEJAVUSANS24 0
//<q> Font DejaVuSans32
#define GDISP_INCLUDE_FONT_DEJAVUSANS32 0
//<q> Font DejaVuSansBold12
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 0
//<q> Font Fixed_10x20
#define GDISP_INCLUDE_FONT_FIXED_10X20 0
//<q> Font Fixed_7x14
#define GDISP_INCLUDE_FONT_FIXED_7X14 0
//<q> Font Fixed_5x8
#define GDISP_INCLUDE_FONT_FIXED_5X8 0
//<q> Font DejaVuSans12_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA 1
//<q> Font DejaVuSans16_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA 1
//<q> Font DejaVuSans20_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA 0
//<q> Font Dejavusans24_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA 0
//<q> Font DejaVuSans32_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA 0
//<q> Font DejaVuSansBold12_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA 0
//<q> Font user
#define GDISP_INCLUDE_USER_FONTS 1
// </e>
// </e>
// <e> Image usage
#define GDISP_NEED_IMAGE 1
// <e> Image bitmap (BMP)
#define GDISP_NEED_IMAGE_BMP 1
//<q> Bitmap 1 bit
#define GDISP_NEED_IMAGE_BMP_1 0
//<q> Bitmap 4 bits
#define GDISP_NEED_IMAGE_BMP_4 0
//<q> Bitmap 4 bits RLE compressed
#define GDISP_NEED_IMAGE_BMP_4_RLE 1
//<q> Bitmap 8 bits
#define GDISP_NEED_IMAGE_BMP_8 0
//<q> Bitmap 8 bits RLE compressed
#define GDISP_NEED_IMAGE_BMP_8_RLE 1
//<q> Bitmap 16 bits
#define GDISP_NEED_IMAGE_BMP_16 0
//<q> Bitmap 24 bits
#define GDISP_NEED_IMAGE_BMP_24 0
//<q> Bitmap 32 bits
#define GDISP_NEED_IMAGE_BMP_32 0
#define GDISP_IMAGE_BMP_BLIT_BUFFER_SIZE 32
// </e>
//<q> Image GIF
#define GDISP_NEED_IMAGE_GIF 0
#define GDISP_IMAGE_GIF_BLIT_BUFFER_SIZE 32
//<q> Image JPG
#define GDISP_NEED_IMAGE_JPG 0
//<e> Image PNG
#define GDISP_NEED_IMAGE_PNG 0
//<q> PDG interlaced
#define GDISP_NEED_IMAGE_PNG_INTERLACED 0
//<q> PDG transparency
#define GDISP_NEED_IMAGE_PNG_TRANSPARENCY 1
//<q> PDG background
#define GDISP_NEED_IMAGE_PNG_BACKGROUND 1
// #define GDISP_NEED_IMAGE_PNG_ALPHACLIFF 32
// #define GDISP_NEED_IMAGE_PNG_PALETTE_124 TRUE
// #define GDISP_NEED_IMAGE_PNG_PALETTE_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_124 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGB_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGB_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_16 TRUE
// #define GDISP_IMAGE_PNG_BLIT_BUFFER_SIZE 32
// #define GDISP_IMAGE_PNG_FILE_BUFFER_SIZE 8
// #define GDISP_IMAGE_PNG_Z_BUFFER_SIZE 32768
// </e>
// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE
// #define GDISP_NEED_IMAGE_NATIVE FALSE
//#define GDISP_NEED_PIXMAP FALSE
// #define GDISP_NEED_PIXMAP_IMAGE FALSE
//#define GDISP_LINEBUF_SIZE 128
//#define GDISP_STARTUP_COLOR Black
#define GDISP_NEED_STARTUP_LOGO FALSE
//#define GDISP_TOTAL_DISPLAYS 1
#define GDISP_DRIVER_LIST GDISPVMT_STM32LTDC
// #ifdef GDISP_DRIVER_LIST
// // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability
// #define GDISP_HARDWARE_STREAM_WRITE FALSE
// #define GDISP_HARDWARE_STREAM_READ FALSE
// #define GDISP_HARDWARE_STREAM_POS FALSE
// #define GDISP_HARDWARE_DRAWPIXEL FALSE
// #define GDISP_HARDWARE_CLEARS FALSE
// #define GDISP_HARDWARE_FILLS FALSE
// #define GDISP_HARDWARE_BITFILLS FALSE
// #define GDISP_HARDWARE_SCROLL FALSE
#define GDISP_HARDWARE_PIXELREAD GFXON
// #define GDISP_HARDWARE_CONTROL FALSE
// #define GDISP_HARDWARE_QUERY FALSE
// #define GDISP_HARDWARE_CLIP FALSE
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
// #endif
//#define GDISP_USE_GFXNET FALSE
// #define GDISP_GFXNET_PORT 13001
// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE
// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE
// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE
//</e>
// </e>
///////////////////////////////////////////////////////////////////////////
// GWIN //
///////////////////////////////////////////////////////////////////////////
// <e> GWIN configuration
#define GFX_USE_GWIN 1
// <e> Use windows manager
#define GWIN_NEED_WINDOWMANAGER 1
//<q> Redraw imadiate
#define GWIN_REDRAW_IMMEDIATE 0
//<q> Redraw all windows in single operation
#define GWIN_REDRAW_SINGLEOP 1
//<q> Flashing widget support
#define GWIN_NEED_FLASHING 0
//<o> Flashing period
#define GWIN_FLASHING_PERIOD 250
// </e>
// <e> Console support
#define GWIN_NEED_CONSOLE 1
//<q> Console history
#define GWIN_CONSOLE_HISTORY_ATCREATE 1
// #define GWIN_CONSOLE_USE_HISTORY
// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
//<q> Use escape command for coloring
#define GWIN_CONSOLE_ESCSEQ 1
// #define GWIN_CONSOLE_USE_BASESTREAM FALSE // chibios only
//<q> Floating numbers support
#define GWIN_CONSOLE_USE_FLOAT 0
//</e>
//#define GWIN_NEED_GRAPH FALSE
//#define GWIN_NEED_GL3D FALSE
//<q> Widget support
#define GWIN_NEED_WIDGET 1
//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1
//<q> Label support
#define GWIN_NEED_LABEL 1
// #define GWIN_LABEL_ATTRIBUTE FALSE
//<q> Button support
#define GWIN_NEED_BUTTON 1
// #define GWIN_BUTTON_LAZY_RELEASE FALSE
//<q> Slider support
#define GWIN_NEED_SLIDER 0
// #define GWIN_SLIDER_NOSNAP FALSE
// #define GWIN_SLIDER_DEAD_BAND 5
// #define GWIN_SLIDER_TOGGLE_INC 20
//<q> Checkbox support
#define GWIN_NEED_CHECKBOX 1
//<e> Image support
#define GWIN_NEED_IMAGE 1
//<q> Image animation support
#define GWIN_NEED_IMAGE_ANIMATION 0
//</e>
//<q> Radio button support
#define GWIN_NEED_RADIO 1
//<e> List support
#define GWIN_NEED_LIST 0
//<q> List image support
#define GWIN_NEED_LIST_IMAGES 0
// </e>
//<q> Progressbar support
#define GWIN_NEED_PROGRESSBAR 0
// #define GWIN_PROGRESSBAR_AUTO FALSE
//<q> Keyboard support
#define GWIN_NEED_KEYBOARD 0
// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1
// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE
//<q> Text edit support
#define GWIN_NEED_TEXTEDIT 0
// #define GWIN_FLAT_STYLING FALSE
//<q> Widgets tag support
#define GWIN_WIDGET_TAGS 1
//<q> Containers support
#define GWIN_NEED_CONTAINERS 1
//<q> Need container support
#define GWIN_NEED_CONTAINER 1
//<q> Frame support
#define GWIN_NEED_FRAME 0
//<q> Tabset support (see details)
#define GWIN_NEED_TABSET 0
// #define GWIN_TABSET_TABHEIGHT 18
// </e>
///////////////////////////////////////////////////////////////////////////
// GTRANS //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GTRANS FALSE
///////////////////////////////////////////////////////////////////////////
// GEVENT //
///////////////////////////////////////////////////////////////////////////
// <e> GEVENT configuration
#define GFX_USE_GEVENT 1
//#define GEVENT_ASSERT_NO_RESOURCE FALSE
//<o> Maximum size of an event (in bytes)
#define GEVENT_MAXIMUM_SIZE 32
//<o> Maximum Source/Listener pair
#define GEVENT_MAX_SOURCE_LISTENERS 32
//</e>
///////////////////////////////////////////////////////////////////////////
// GTIMER //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GTIMER 1
#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
#define GTIMER_THREAD_WORKAREA_SIZE 4096
///////////////////////////////////////////////////////////////////////////
// GQUEUE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GQUEUE TRUE
#define GQUEUE_NEED_ASYNC TRUE
//#define GQUEUE_NEED_GSYNC FALSE
//#define GQUEUE_NEED_FSYNC FALSE
//#define GQUEUE_NEED_BUFFERS FALSE
///////////////////////////////////////////////////////////////////////////
// GINPUT //
///////////////////////////////////////////////////////////////////////////
// <e> GINPUT configuration
#define GFX_USE_GINPUT 1
//<q> Mouse / touchscreen support
#define GINPUT_NEED_MOUSE 1
// #define GINPUT_TOUCH_STARTRAW FALSE
// #define GINPUT_TOUCH_NOTOUCH FALSE
// #define GINPUT_TOUCH_NOCALIBRATE FALSE
#define GINPUT_TOUCH_NOCALIBRATE_GUI TRUE
// #define GINPUT_MOUSE_POLL_PERIOD 25
// #define GINPUT_MOUSE_CLICK_TIME 300
// #define GINPUT_TOUCH_CXTCLICK_TIME 700
// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE
// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE
#define GMOUSE_DRIVER_LIST GMOUSEVMT_FT5336
//<q> Keyboard support
#define GINPUT_NEED_KEYBOARD 0
// #define GINPUT_KEYBOARD_POLL_PERIOD 200
// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32
// #define GKEYBOARD_LAYOUT_OFF FALSE
// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE
//#define GINPUT_NEED_TOGGLE FALSE
//#define GINPUT_NEED_DIAL FALSE
//</e>
///////////////////////////////////////////////////////////////////////////
// GFILE //
///////////////////////////////////////////////////////////////////////////
// <e> GFILE configuration
#define GFX_USE_GFILE 1
// <e> String support
#define GFILE_NEED_STRINGS 0
//<q> printfg, fprintg, etc support
#define GFILE_NEED_PRINTG 0
//<q> scang, fscang, etc support
#define GFILE_NEED_SCANG 0
//</e>
//#define GFILE_NEED_FILELISTS FALSE
//#define GFILE_NEED_STDIO FALSE
//#define GFILE_NEED_NOAUTOMOUNT FALSE
//#define GFILE_NEED_NOAUTOSYNC FALSE
//#define GFILE_NEED_MEMFS FALSE
//<q> ROM file system support
#define GFILE_NEED_ROMFS 1
//<q> RAM file system support
#define GFILE_NEED_RAMFS 0
//#define GFILE_NEED_FATFS FALSE
//#define GFILE_NEED_NATIVEFS FALSE
//#define GFILE_NEED_CHBIOSFS FALSE
//#define GFILE_NEED_USERFS FALSE
//#define GFILE_ALLOW_FLOATS FALSE
//#define GFILE_ALLOW_DEVICESPECIFIC FALSE
//<o> Maximum number of files
#define GFILE_MAX_GFILES 6
//</e>
///////////////////////////////////////////////////////////////////////////
// GADC //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GADC FALSE
// #define GADC_MAX_LOWSPEED_DEVICES 4
///////////////////////////////////////////////////////////////////////////
// GAUDIO //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GAUDIO FALSE
// #define GAUDIO_NEED_PLAY FALSE
// #define GAUDIO_NEED_RECORD FALSE
///////////////////////////////////////////////////////////////////////////
// GMISC //
///////////////////////////////////////////////////////////////////////////
// <e> GMISC configuration (see details in file)
#define GFX_USE_GMISC 0
//#define GMISC_NEED_ARRAYOPS FALSE
//#define GMISC_NEED_FASTTRIG FALSE
//#define GMISC_NEED_FIXEDTRIG FALSE
//#define GMISC_NEED_INVSQRT FALSE
// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE
// #define GMISC_INVSQRT_REAL_SLOW FALSE
#define GMISC_NEED_MATRIXFLOAT2D 0
//#define GMISC_NEED_MATRIXFIXED2D FALSE
//#define GMISC_NEED_HITTEST_POLY FALSE
// </e>
//</h>
#endif /* _GFXCONF_H */

View File

@ -0,0 +1,82 @@
#include "gfx.h"
#include "stm32f7_i2c.h"
#include "Driver_I2C.h"
/* I2C Driver */
extern ARM_DRIVER_I2C Driver_I2C3;
static ARM_DRIVER_I2C * I2Cdrv = &Driver_I2C3;
#ifndef EEPROM_I2C_PORT
#define EEPROM_I2C_PORT 3 /* I2C Port number */
#endif
#define A_WR 0 /* Master will write to the I2C */
#define A_RD 1 /* Master will read from the I2C */
static uint8_t wr_buf[256];
uint8_t gI2CAccess = 0;
bool_t i2cInit(I2C_TypeDef* i2c)
{
gI2CAccess = 1;
I2Cdrv->Initialize (NULL);
I2Cdrv->PowerControl (ARM_POWER_FULL);
I2Cdrv->Control (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD);
I2Cdrv->Control (ARM_I2C_BUS_CLEAR, 0);
gI2CAccess = 0;
return 1; // just says no error
}
void i2cWriteReg(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr, uint8_t value)
{
wr_buf[0] = regAddr;
wr_buf[1] = value;
gI2CAccess = 1;
I2Cdrv->MasterTransmit (slaveAddr/2, wr_buf, 2, false);
while (I2Cdrv->GetStatus().busy);
if (I2Cdrv->GetDataCount () != 2) return;
/* Acknowledge polling */
gI2CAccess = 0;
// do {
// I2Cdrv->MasterReceive (DeviceAddr, &wr_buf[0], 1, false);
// while (I2Cdrv->GetStatus().busy);
// } while (I2Cdrv->GetDataCount () < 0);
}
uint8_t i2cReadByte(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr)
{
uint8_t ret = 0;
gI2CAccess = 1;
I2Cdrv->MasterTransmit (slaveAddr/2, &regAddr, 1, true);
while (I2Cdrv->GetStatus().busy);
I2Cdrv->MasterReceive (slaveAddr/2, &ret, 1, false);
while (I2Cdrv->GetStatus().busy);
if (I2Cdrv->GetDataCount () != 1) return 0xAA;
gI2CAccess = 0;
return ret;
}
uint16_t i2cReadWord(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr)
{
uint8_t ret[2] = { 0, 0 };
gI2CAccess = 1;
I2Cdrv->MasterTransmit (slaveAddr/2, &regAddr, 1, true);
while (I2Cdrv->GetStatus().busy);
I2Cdrv->MasterReceive (slaveAddr/2, ret, 2, false);
while (I2Cdrv->GetStatus().busy);
if (I2Cdrv->GetDataCount () != 2) return 0xAAAA;
gI2CAccess = 0;
return (uint16_t)((ret[0] << 8) | (ret[1] & 0x00FF));
}

74
audio.c Normal file
View File

@ -0,0 +1,74 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file audio.c
/// \brief Audio thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include "main.h"
#include "audio_msg.c"
#include "audio_error.c"
#include "audio_clock.c"
#include "Board_Audio.h"
extern uint8_t gI2CAccess;
//////////////////////////////////////////////////////////////////////////////////
// THREAD AUDIO
//////////////////////////////////////////////////////////////////////////////////
void AudioPlayer(void *argument)
{
int32_t eventFlag; // current flag
//------------------------------------------------------------------------------
// Initialize the audio interface (need to be intialised first)
// this thread has a most important priority and block kernel switch when
// intilalising the audio interface
//------------------------------------------------------------------------------
while(gI2CAccess != 0){}
osKernelLock();
Audio_Initialize (NULL);
Audio_SetDataFormat(AUDIO_STREAM_OUT, AUDIO_DATA_16_MONO);
Audio_SetFrequency (AUDIO_STREAM_OUT,16000);
Audio_SetMute (AUDIO_STREAM_OUT, AUDIO_CHANNEL_MASTER, false);
Audio_SetVolume (AUDIO_STREAM_OUT, AUDIO_CHANNEL_MASTER, 50);
Audio_Start (AUDIO_STREAM_OUT);
//------------------------------------------------------------------------------
// Bacause of audio initialize use the I2C interrupts and the uGFX touch
// protocol don't use it, we neeed to clear this register
// I2C3->CR1 = 0;
osKernelUnlock();
//------------------------------------------------------------------------------
while (1) // forever
{
//----------------------------------------------------------------------------
// EVENT GET wait always (AUDIO_xxx_EVT)
//----------------------------------------------------------------------------
eventFlag = osEventFlagsWait(
eventFlag_id,
AUDIO_MSG_EVT | AUDIO_ERROR_EVT| AUDIO_CLOCK_EVT,
osFlagsWaitAny,
osWaitForever);
if(eventFlag < 0) // case of error
CheckRetCode(eventFlag,__LINE__,__FILE__,CONTINUE);
//----------------------------------------------------------------------------
if((eventFlag & AUDIO_MSG_EVT) == AUDIO_MSG_EVT) // play incoming message
{
Audio_SendData(audio_msg, sizeof(audio_msg)/2);
}
if((eventFlag & AUDIO_ERROR_EVT) == AUDIO_ERROR_EVT) // play error message
{
Audio_SendData(audio_error, sizeof(audio_error)/2);
}
if((eventFlag & AUDIO_CLOCK_EVT) == AUDIO_CLOCK_EVT) // play clock message
{
Audio_SendData(audio_clock, sizeof(audio_clock)/2);
}
}
}

392
audio_clock.c Normal file
View File

@ -0,0 +1,392 @@
#include "stm32f7xx_hal.h"
const uint16_t audio_clock[]={
65497, 65481, 65477, 65474, 65473, 65466, 65458, 65451,
65448, 65460, 65476, 65504, 65534, 29, 53, 70,
64, 53, 21, 65530, 65509, 65503, 65518, 65531,
28, 34, 45, 28, 8, 65516, 65503, 65497,
65516, 2, 31, 40, 45, 25, 5, 65515,
65490, 65472, 65446, 65429, 65401, 65380, 65358, 65342,
65341, 65347, 65368, 65396, 65425, 65449, 65464, 65463,
65468, 65462, 65472, 65483, 65498, 65513, 65513, 65508,
65485, 65462, 65427, 65406, 65388, 65390, 65416, 65455,
65508, 35, 74, 124, 142, 165, 173, 182,
178, 167, 144, 115, 80, 53, 23, 8,
65528, 65520, 65512, 65507, 65510, 65513, 65524, 65533,
65530, 65529, 65507, 65492, 65465, 65448, 65426, 65418,
65410, 65413, 65418, 65428, 65433, 65439, 65438, 65438,
65432, 65435, 65420, 65428, 65420, 65437, 65455, 65486,
65523, 26, 72, 118, 175, 227, 275, 307,
311, 286, 230, 147, 59, 65500, 65434, 65396,
65399, 65443, 65506, 56, 138, 227, 299, 363,
397, 400, 362, 293, 189, 93, 65518, 65438,
65365, 65310, 65274, 65254, 65255, 65285, 65330, 65393,
65456, 65517, 38, 79, 112, 127, 130, 126,
125, 135, 159, 188, 213, 215, 201, 162,
119, 78, 50, 36, 35, 43, 48, 54,
56, 58, 71, 94, 123, 154, 170, 164,
144, 110, 83, 65, 61, 59, 58, 36,
2, 65493, 65438, 65399, 65366, 65352, 65356, 65368,
65392, 65422, 65455, 65498, 2, 40, 61, 67,
50, 25, 65534, 65514, 65508, 65497, 65490, 65469,
65447, 65429, 65413, 65417, 65420, 65436, 65451, 65474,
65506, 4, 49, 88, 126, 159, 177, 190,
181, 158, 121, 76, 36, 2, 65514, 65493,
65468, 65438, 65391, 65354, 65308, 65307, 65321, 65379,
65448, 65510, 24, 46, 65, 79, 119, 153,
203, 217, 192, 106, 65487, 65277, 65047, 64830,
64684, 64624, 64668, 64793, 64975, 65195, 65415, 98,
282, 425, 514, 537, 504, 406, 270, 116,
65501, 65400, 65317, 65285, 65243, 65208, 65157, 65134,
65124, 65172, 65229, 65316, 65381, 65452, 65481, 65504,
65484, 65469, 65457, 65488, 15, 81, 106, 65,
65488, 65351, 65225, 65151, 65128, 65157, 65217, 65295,
65379, 65429, 65441, 65403, 65364, 65354, 65426, 8,
141, 227, 235, 187, 113, 66, 61, 93,
148, 187, 180, 114, 65504, 65331, 65173, 65108,
65172, 65354, 62, 289, 428, 453, 374, 230,
82, 65522, 65506, 46, 157, 246, 249, 148,
65521, 65367, 65286, 65310, 65407, 65530, 81, 97,
35, 65454, 65336, 65275, 65340, 3, 296, 598,
787, 799, 632, 346, 63, 65404, 65347, 65419,
20, 148, 207, 162, 38, 65419, 65300, 65274,
65347, 65506, 159, 339, 468, 544, 559, 546,
519, 515, 545, 600, 655, 658, 577, 401,
154, 65415, 65168, 64996, 64919, 64965, 65093, 65276,
65448, 16, 47, 5, 65492, 65474, 65513, 65,
159, 218, 211, 131, 65530, 65372, 65231, 65147,
65140, 65204, 65326, 65462, 69, 199, 325, 455,
582, 697, 778, 801, 766, 657, 508, 313,
126, 65481, 65344, 65238, 65165, 65119, 65088, 65088,
65105, 65169, 65243, 65339, 65411, 65451, 65440, 65374,
65281, 65181, 65123, 65106, 65140, 65181, 65211, 65207,
65190, 65188, 65245, 65365, 4, 203, 367, 495,
543, 535, 479, 395, 308, 227, 164, 96,
39, 65504, 65441, 65396, 65372, 65379, 65395, 65427,
65449, 65484, 65523, 37, 99, 150, 186, 183,
127, 33, 65421, 65266, 65124, 65021, 64989, 65007,
65069, 65148, 65225, 65299, 65375, 65463, 33, 150,
271, 386, 478, 544, 544, 483, 333, 130,
65448, 65251, 65136, 65070, 65065, 65054, 65034, 64993,
64966, 64978, 65055, 65184, 65357, 65533, 163, 293,
369, 395, 354, 270, 146, 22, 65435, 65334,
65247, 65172, 65122, 65095, 65122, 65193, 65322, 65483,
132, 319, 494, 636, 724, 745, 680, 553,
369, 160, 65487, 65276, 65092, 64923, 64792, 64701,
64660, 64668, 64722, 64820, 64956, 65122, 65308, 65495,
141, 294, 413, 481, 489, 436, 330, 205,
88, 13, 65510, 65502, 65499, 65496, 65497, 65519,
37, 131, 242, 373, 489, 601, 662, 678,
616, 500, 352, 208, 100, 26, 65509, 65462,
65399, 65339, 65287, 65252, 65257, 65288, 65357, 65446,
65521, 21, 65518, 65413, 65277, 65175, 65155, 65230,
65376, 65522, 92, 120, 82, 19, 65508, 65505,
24, 104, 182, 215, 192, 133, 82, 87,
161, 286, 395, 439, 367, 199, 65507, 65296,
65157, 65138, 65230, 65420, 92, 270, 356, 345,
265, 168, 98, 76, 82, 75, 52, 65523,
65471, 65433, 65436, 65467, 65515, 14, 36, 13,
65487, 65373, 65227, 65100, 65046, 65122, 65335, 110,
427, 644, 687, 514, 176, 65252, 64776, 64343,
64017, 63832, 63802, 63932, 64197, 64582, 65028, 65522,
485, 961, 1384, 1680, 1789, 1667, 1307, 793,
231, 65277, 64941, 64762, 64704, 64711, 64734, 64765,
64811, 64883, 65007, 65178, 65403, 120, 352, 524,
577, 524, 397, 263, 184, 147, 120, 28,
65369, 65082, 64761, 64493, 64330, 64311, 64401, 64570,
64752, 64915, 65044, 65147, 65268, 65413, 59, 247,
388, 471, 474, 445, 410, 398, 409, 421,
413, 364, 284, 181, 74, 65531, 65483, 65488,
65535, 64, 148, 232, 353, 505, 690, 854,
930, 871, 665, 365, 48, 65320, 65151, 65057,
65011, 64963, 64900, 64815, 64751, 64740, 64827, 65022,
65290, 44, 273, 379, 356, 220, 55, 65463,
65422, 65473, 45, 137, 161, 72, 65417, 65170,
64942, 64783, 64748, 64820, 65003, 65247, 3, 306,
586, 818, 965, 1028, 1018, 964, 899, 838,
787, 723, 641, 516, 363, 194, 43, 65487,
65465, 65524, 86, 170, 195, 108, 65479, 65273,
65121, 65098, 65230, 65488, 250, 473, 569, 507,
377, 236, 172, 173, 206, 201, 101, 65447,
65184, 64922, 64723, 64625, 64677, 64837, 65090, 65348,
28, 176, 268, 348, 465, 611, 772, 881,
901, 819, 672, 491, 351, 257, 231, 260,
305, 366, 409, 437, 451, 452, 445, 429,
395, 339, 249, 134, 65521, 65373, 65229, 65110,
65019, 64935, 64849, 64750, 64646, 64585, 64587, 64685,
64859, 65078, 65291, 65472, 64, 131, 141, 95,
6, 65441, 65353, 65304, 65298, 65331, 65380, 65439,
65509, 37, 104, 135, 143, 101, 50, 65524,
65490, 65487, 65517, 43, 134, 249, 376, 520,
643, 753, 815, 823, 765, 637, 448, 215,
65496, 65245, 65016, 64837, 64731, 64704, 64758, 64863,
64971, 65056, 65077, 65064, 65022, 65008, 65022, 65083,
65160, 65229, 65261, 65232, 65165, 65057, 64978, 64924,
64944, 65008, 65109, 65216, 65322, 65427, 15, 149,
293, 413, 487, 498, 454, 380, 306, 263,
255, 280, 322, 359, 391, 409, 427, 438,
446, 436, 406, 339, 257, 145, 48, 65497,
65444, 65421, 65405, 65374, 65302, 65182, 65047, 64931,
64892, 64936, 65050, 65176, 65252, 65257, 65181, 65083,
65004, 64988, 65045, 65139, 65247, 65322, 65363, 65388,
65431, 65533, 172, 405, 654, 860, 974, 970,
863, 701, 534, 417, 359, 346, 349, 325,
277, 202, 143, 116, 143, 207, 280, 344,
372, 378, 360, 336, 308, 262, 199, 92,
65498, 65341, 65192, 65066, 64984, 64948, 64947, 64973,
65003, 65046, 65086, 65139, 65191, 65240, 65264, 65255,
65205, 65127, 65049, 65006, 65022, 65115, 65265, 65447,
87, 232, 330, 395, 426, 448, 453, 438,
401, 334, 251, 173, 114, 96, 128, 198,
313, 442, 576, 688, 762, 788, 757, 681,
561, 413, 252, 84, 65465, 65330, 65225, 65153,
65116, 65112, 65131, 65185, 65253, 65345, 65441, 65515,
29, 17, 65506, 65416, 65322, 65235, 65177, 65143,
65128, 65117, 65096, 65075, 65046, 65049, 65081, 65175,
65316, 65503, 162, 343, 477, 563, 591, 596,
569, 555, 539, 534, 538, 532, 528, 501,
464, 403, 334, 255, 179, 110, 51, 65530,
65472, 65406, 65340, 65269, 65219, 65182, 65186, 65211,
65270, 65334, 65393, 65439, 65443, 65432, 65392, 65348,
65296, 65244, 65175, 65097, 65004, 64921, 64865, 64865,
64926, 65043, 65196, 65350, 65494, 70, 159, 228,
289, 337, 379, 387, 372, 305, 215, 104,
10, 65488, 65493, 17, 119, 230, 311, 359,
366, 352, 338, 317, 300, 251, 182, 68,
65489, 65371, 65284, 65230, 65193, 65177, 65146, 65113,
65068, 65027, 65001, 64996, 65012, 65049, 65086, 65123,
65137, 65131, 65108, 65078, 65061, 65068, 65107, 65175,
65265, 65370, 65480, 53, 154, 226, 268, 261,
207, 118, 20, 65472, 65433, 65442, 65496, 45,
135, 221, 290, 348, 397, 444, 481, 512,
511, 487, 426, 337, 235, 121, 16, 65460,
65383, 65330, 65291, 65274, 65264, 65269, 65282, 65302,
65331, 65359, 65385, 65405, 65415, 65416, 65413, 65407,
65401, 65394, 65382, 65367, 65347, 65339, 65334, 65359,
65391, 65459, 65527, 85, 171, 260, 336, 395,
430, 441, 423, 393, 345, 311, 271, 271,
276, 314, 366, 415, 463, 487, 496, 481,
457, 423, 392, 346, 307, 241, 186, 117,
63, 21, 65527, 65512, 65493, 65471, 65434, 65387,
65337, 65292, 65263, 65251, 65260, 65281, 65310, 65329,
65349, 65349, 65360, 65371, 65404, 65460, 65528, 74,
136, 187, 203, 202, 181, 169, 150, 158,
158, 172, 176, 181, 185, 190, 213, 244,
287, 335, 369, 386, 371, 329, 264, 197,
129, 85, 56, 39, 27, 2, 65499, 65454,
65400, 65360, 65329, 65312, 65296, 65284, 65256, 65235,
65205, 65192, 65189, 65198, 65209, 65211, 65200, 65164,
65132, 65093, 65093, 65113, 65179, 65261, 65359, 65442,
65502, 65531, 1, 65529, 65524, 65526, 2, 19,
27, 30, 8, 65525, 65487, 65469, 65447, 65449,
65452, 65467, 65484, 65496, 65517, 65524, 6, 5,
7, 65525, 65499, 65461, 65418, 65370, 65334, 65304,
65286, 65283, 65277, 65281, 65266, 65255, 65219, 65191,
65153, 65126, 65107, 65101, 65106, 65116, 65127, 65140,
65149, 65167, 65190, 65227, 65277, 65338, 65398, 65454,
65485, 65503, 65497, 65484, 65478, 65486, 65527, 55,
138, 221, 296, 339, 359, 350, 330, 307,
286, 273, 252, 229, 182, 126, 54, 65523,
65464, 65426, 65396, 65383, 65361, 65344, 65311, 65293,
65279, 65289, 65326, 65365, 65414, 65439, 65435, 65412,
65355, 65314, 65265, 65258, 65258, 65282, 65314, 65328,
65351, 65347, 65362, 65375, 65413, 65466, 4, 82,
160, 223, 265, 288, 278, 262, 225, 203,
183, 187, 203, 238, 267, 296, 307, 300,
289, 265, 251, 243, 243, 244, 252, 243,
240, 226, 210, 198, 178, 160, 133, 100,
67, 37, 16, 7, 3, 3, 65531, 65512,
65485, 65452, 65433, 65423, 65443, 65473, 65515, 17,
41, 47, 44, 33, 30, 42, 69, 112,
166, 221, 278, 321, 366, 393, 419, 427,
429, 410, 389, 348, 312, 267, 233, 205,
186, 183, 180, 190, 188, 185, 157, 121,
63, 3, 65484, 65441, 65426, 65430, 65453, 65484,
65510, 65515, 65509, 65470, 65433, 65381, 65343, 65314,
65303, 65305, 65320, 65338, 65369, 65399, 65437, 65479,
65528, 34, 84, 111, 132, 130, 105, 67,
13, 65496, 65453, 65427, 65433, 65460, 65511, 33,
87, 124, 136, 128, 109, 88, 86, 95,
132, 163, 192, 189, 158, 91, 10, 65448,
65367, 65293, 65240, 65197, 65163, 65143, 65143, 65173,
65245, 65356, 65502, 111, 224, 269, 205, 37,
65296, 64953, 64611, 64327, 64189, 64242, 64507, 64960,
65522, 549, 990, 1204, 1137, 798, 271, 65202,
64674, 64310, 64197, 64317, 64627, 65050, 65499, 373,
705, 923, 1031, 997, 840, 553, 176, 65311,
64942, 64710, 64634, 64749, 64999, 65321, 91, 312,
414, 398, 305, 176, 52, 65502, 65441, 65425,
65421, 65442, 65485, 65534, 62, 104, 105, 51,
65461, 65289, 65096, 64928, 64818, 64797, 64857, 64992,
65166, 65356, 0, 160, 286, 390, 455, 495,
496, 456, 380, 267, 139, 20, 65473, 65466,
14, 192, 438, 681, 865, 891, 742, 402,
65496, 65053, 64747, 64670, 64870, 65283, 270, 741,
1031, 1067, 856, 483, 65, 65256, 65035, 64951,
64939, 64950, 64923, 64876, 64836, 64881, 65045, 65346,
172, 530, 759, 812, 675, 402, 90, 65382,
65268, 65319, 65491, 177, 360, 431, 361, 152,
65405, 65108, 64894, 64821, 64918, 65187, 25, 435,
786, 998, 1042, 908, 651, 343, 51, 65378,
65254, 65231, 65248, 65306, 65348, 65406, 65466, 21,
149, 289, 436, 528, 561, 499, 356, 155,
65464, 65257, 65107, 65037, 65066, 65181, 65354, 17,
187, 297, 324, 264, 152, 16, 65435, 65361,
65325, 65323, 65318, 65301, 65265, 65239, 65250, 65333,
65498, 186, 426, 622, 710, 669, 500, 246,
65509, 65293, 65170, 65187, 65299, 65491, 144, 293,
358, 337, 250, 133, 43, 65521, 13, 63,
148, 200, 197, 125, 65533, 65365, 65219, 65103,
65058, 65071, 65124, 65194, 65244, 65275, 65274, 65267,
65267, 65298, 65355, 65441, 65517, 43, 49, 13,
65465, 65365, 65281, 65243, 65274, 65384, 14, 223,
417, 584, 672, 687, 620, 491, 324, 141,
65493, 65332, 65185, 65082, 65004, 64992, 65027, 65145,
65319, 5, 240, 441, 567, 592, 489, 289,
14, 65256, 64995, 64803, 64714, 64728, 64827, 64996,
65189, 65385, 23, 153, 235, 269, 249, 198,
110, 16, 65451, 65362, 65297, 65251, 65242, 65254,
65287, 65336, 65378, 65419, 65439, 65447, 65439, 65434,
65429, 65452, 65484, 7, 64, 108, 132, 109,
63, 65524, 65455, 65402, 65395, 65430, 65513, 87,
199, 303, 365, 393, 367, 303, 201, 75,
65476, 65341, 65236, 65155, 65134, 65149, 65225, 65322,
65445, 17, 101, 139, 124, 56, 65489, 65372,
65257, 65181, 65141, 65160, 65218, 65317, 65434, 24,
146, 257, 345, 422, 457, 475, 457, 411,
346, 265, 177, 109, 52, 30, 31, 51,
81, 113, 142, 161, 183, 190, 192, 167,
104, 11, 65415, 65272, 65150, 65063, 65058, 65124,
65254, 65432, 64, 219, 311, 353, 337, 287,
213, 135, 63, 65533, 65465, 65398, 65313, 65226,
65149, 65090, 65086, 65134, 65233, 65373, 65510, 105,
190, 236, 237, 214, 170, 123, 70, 16,
65489, 65424, 65355, 65297, 65272, 65276, 65343, 65450,
62, 217, 345, 426, 431, 371, 264, 133,
17, 65463, 65411, 65387, 65395, 65401, 65424, 65437,
65451, 65479, 65506, 24, 79, 151, 208, 253,
260, 229, 161, 64, 65497, 65403, 65343, 65320,
65337, 65381, 65434, 65488, 65530, 31, 60, 86,
118, 139, 170, 179, 196, 198, 197, 202,
190, 198, 188, 189, 186, 175, 168, 153,
138, 125, 109, 91, 75, 46, 17, 65520,
65488, 65475, 65470, 65490, 65526, 30, 74, 111,
134, 154, 148, 139, 103, 55, 65528, 65458,
65395, 65348, 65321, 65332, 65378, 65457, 37, 150,
270, 353, 401, 403, 361, 292, 203, 105,
15, 65459, 65387, 65320, 65271, 65248, 65251, 65293,
65371, 65480, 73, 202, 309, 387, 406, 383,
299, 187, 45, 65447, 65317, 65228, 65158, 65132,
65121, 65144, 65173, 65231, 65293, 65378, 65462, 10,
71, 97, 86, 32, 65503, 65429, 65386, 65374,
65402, 65462, 65530, 60, 104, 118, 107, 66,
18, 65501, 65452, 65413, 65375, 65338, 65301, 65258,
65221, 65184, 65175, 65179, 65224, 65297, 65404, 65529,
134, 255, 359, 418, 431, 393, 316, 203,
87, 65495, 65402, 65314, 65276, 65253, 65280, 65319,
65397, 65475, 36, 113, 185, 225, 239, 231,
194, 143, 85, 15, 65485, 65419, 65353, 65299,
65260, 65239, 65254, 65291, 65358, 65447, 5, 104,
184, 245, 270, 268, 231, 184, 133, 85,
67, 42, 44, 25, 7, 65515, 65471, 65438,
65395, 65372, 65345, 65339, 65333, 65354, 65380, 65437,
65499, 44, 120, 193, 253, 299, 331, 353,
359, 356, 324, 275, 183, 69, 65462, 65316,
65181, 65081, 65036, 65054, 65137, 65269, 65441, 80,
261, 404, 522, 592, 620, 602, 539, 441,
304, 157, 65522, 65372, 65233, 65134, 65077, 65062,
65092, 65157, 65240, 65339, 65428, 65512, 46, 105,
161, 202, 238, 256, 253, 231, 194, 146,
109, 79, 71, 79, 97, 117, 125, 116,
86, 33, 65513, 65448, 65407, 65377, 65373, 65392,
65417, 65462, 65505, 18, 75, 119, 162, 171,
164, 112, 44, 65486, 65390, 65295, 65223, 65166,
65148, 65150, 65181, 65235, 65301, 65386, 65464, 16,
81, 135, 164, 159, 138, 82, 21, 65485,
65424, 65363, 65329, 65301, 65299, 65313, 65347, 65397,
65465, 65531, 66, 112, 148, 150, 138, 102,
62, 23, 65522, 65506, 65490, 65490, 65484, 65477,
65464, 65442, 65421, 65400, 65382, 65378, 65372, 65381,
65380, 65382, 65374, 65369, 65364, 65380, 65407, 65459,
65526, 62, 138, 198, 242, 258, 249, 211,
151, 75, 65524, 65439, 65359, 65296, 65255, 65238,
65249, 65276, 65324, 65376, 65434, 65490, 11, 62,
113, 157, 192, 219, 231, 235, 221, 210,
181, 154, 117, 68, 15, 65488, 65430, 65380,
65359, 65356, 65388, 65435, 65490, 14, 53, 87,
88, 91, 64, 53, 25, 21, 19, 37,
59, 86, 102, 111, 100, 88, 67, 57,
48, 55, 51, 58, 47, 45, 33, 35,
35, 47, 60, 76, 87, 93, 84, 70,
48, 28, 17, 8, 6, 65534, 65515, 65490,
65450, 65421, 65393, 65393, 65415, 65460, 65516, 38,
76, 98, 85, 53, 4, 65484, 65432, 65386,
65355, 65334, 65329, 65327, 65343, 65356, 65388, 65421,
65466, 65512, 25, 70, 106, 131, 141, 136,
121, 96, 62, 37, 3, 65521, 65503, 65494,
65495, 65494, 65500, 65501, 65502, 65491, 65490, 65474,
65479, 65474, 65489, 65500, 65528, 15, 46, 66,
85, 87, 87, 75, 62, 40, 22, 65535,
65514, 65497, 65473, 65457, 65434, 65416, 65398, 65380,
65377, 65373, 65390, 65409, 65440, 65476, 65513, 15,
50, 80, 103, 119, 124, 120, 111, 90,
78, 64, 54, 54, 46, 49, 47, 47,
55, 59, 63, 67, 57, 50, 32, 12,
65531, 65507, 65504, 65494, 65504, 65515, 65525, 6,
10, 18, 18, 14, 14, 10, 20, 28,
41, 52, 54, 53, 40, 29, 12, 5,
65530, 65533, 65527, 4, 2, 14, 13, 8,
6, 65525, 65519, 65501, 65489, 65481, 65479, 65496,
65522, 31, 76, 123, 146, 164, 146, 129,
83, 48, 5, 65514, 65491, 65480, 65472, 65466,
65469, 65468, 65477, 65493, 65500, 65526, 65529, 17,
20, 37, 42, 53, 60, 67, 77, 79,
86, 80, 73, 54, 34, 2, 65511, 65475,
65455, 65432, 65428, 65430, 65444, 65466, 65495, 65526,
22, 53, 77, 94, 99, 91, 76, 49,
30, 8, 0, 3, 12, 36, 53, 70,
76, 69, 55, 33, 11, 65526, 65518, 65507,
65516, 65517, 65529, 65534, 3, 7, 8, 11,
17, 15, 27, 24, 32, 37, 39, 50,
55, 72, 82, 100, 112, 116, 121, 110,
99, 84, 65, 53, 39, 39, 35, 42,
46, 47, 50, 40, 35, 18, 9, 65535,
1, 8, 27, 45, 61, 76, 78, 79,
75, 66, 66, 57, 59, 50, 46, 35,
22, 6, 65530, 65511, 65501, 65487, 65475, 65470,
65464, 65466, 65475, 65484, 65499, 65512, 65525, 65531,
5, 1, 3, 65533, 65533, 65528, 65528, 65525,
65521, 65514, 65504, 65486, 65469, 65448, 65430, 65417,
65409, 65415, 65414, 65434, 65435, 65453, 65455, 65465,
65469, 65477, 65484, 65496, 65507, 65517, 65527, 65530,
65532, 65527, 65513, 65499, 65477, 65453, 65433, 65408,
65397, 65379, 65378, 65365, 65376, 65371, 65388, 65392,
65407, 65415, 65420, 65427, 65422, 65433, 65427, 65440,
65439, 65447, 65454, 65456, 65462, 65464, 65462, 65465,
65462, 65465, 65465, 65471, 65472, 65474, 65476, 65467,
65469, 65460, 65465, 65469, 65475, 65488, 65490, 65501,
65496, 65500, 65494, 65498, 65492, 65501, 65501, 65512,
65525, 0, 19, 33, 47, 63, 68, 78,
71, 71, 56, 53, 42, 42, 41, 41,
45, 43, 44, 41, 38, 35, 29, 26,
22, 20, 21, 20, 29, 33, 40, 50,
52, 63, 65, 73, 75, 77, 75, 74,
66, 63, 49, 46, 33, 27, 23, 18,
23, 26, 37, 51, 67, 92, 104, 125,
126, 132, 125, 119, 110, 96, 91, 77,
80, 73, 81, 82, 85, 89, 86, 82,
69, 52, 30, 3, 65522, 65503, 65505, 65500,
65519, 65525, 14, 29, 51, 69, 83, 90,
98, 95, 97, 95, 90, 93, 86, 83,
79, 65, 56, 36, 19, 1, 65524, 65516,
65509, 65509, 65506, 65511, 65510, 65514, 65511, 65507,
65503, 65500, 65506, 65516, 65531, 5, 12, 9,
65533, 65520, 65495, 65475, 65453, 65435, 65425, 65417,
65417, 65417, 65421, 65427, 65434, 65443, 65446, 65451,
65450, 65451, 65454, 65459, 65458, 65464, 65454, 65454,
65445, 65435, 65431, 65416, 65416, 65412, 65416, 65427,
65436, 65447, 65460, 65474, 65489, 65505, 65505, 65512,
65497, 65498, 65485, 65484, 65478, 65476, 65475, 65487,
65502, 65521
};

2140
audio_error.c Normal file

File diff suppressed because it is too large Load Diff

2635
audio_msg.c Normal file

File diff suppressed because it is too large Load Diff

47
chat_receiver.c Normal file
View File

@ -0,0 +1,47 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file chat_receiver.c
/// \brief Chat receiver thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
//////////////////////////////////////////////////////////////////////////////////
// THREAD CHAT RECEIVER
//////////////////////////////////////////////////////////////////////////////////
void ChatReceiver(void *argument)
{
struct queueMsg_t queueMsg; // queue message
osStatus_t retCode; // return error code
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_chatR_id,
&queueMsg,
NULL,
osWaitForever);
queueMsg.type = CHAT_MSG;
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//----------------------------------------------------------------------------
// QUEUE SEND
//----------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}

142
chat_sender.c Normal file
View File

@ -0,0 +1,142 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file chat_sender.c
/// \brief Chat sender thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "main.h"
#include "ext_keyboard.h"
//////////////////////////////////////////////////////////////////////////////////
/// \brief Called on interrupt keyboard received char
/// \param The GPIO pin caused interrupt (GPIO_PIN_8)
//////////////////////////////////////////////////////////////////////////////////
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
struct queueMsg_t queueMsg; // queue message
osStatus_t retCode;
if((GPIO_Pin == GPIO_PIN_8))
{
if(ext_kbChar != 0)
{
queueMsg.addr = ext_kbChar;
//----------------------------------------------------------------------------
// QUEUE SEND
//----------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_keyboard_id,
&queueMsg,
osPriorityNormal,
0);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
}
//////////////////////////////////////////////////////////////////////////////////
// THREAD CHAT SENDER
//////////////////////////////////////////////////////////////////////////////////
void ChatSender(void *argument)
{
struct queueMsg_t queueMsg; // queue message
char * msg; // any string pointer
char msgToSend[255]; // keep message to send
uint8_t msgToSendPtr=0; // counter of received bytes
osStatus_t retCode; // return error code
//------------------------------------------------------------------------------
// Initialize the keyboard
//------------------------------------------------------------------------------
Ext_Keyboard_Init();
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_keyboard_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
if((gTokenInterface.connected != FALSE)
&&(gTokenInterface.currentView == MAINDISPLAY))
{
// message to send ---------------------------------------------------------
if(queueMsg.addr == 0x0D) // a <CR> has been received
{
// echo LCD
//------------------------------------------------------------------------
// MEMORY ALLOCATION
//------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
queueMsg.type = CHAR_MSG;
queueMsg.anyPtr = msg;
msg[0] = 0x0D; // send a CR
msg[1] = 0x0A; // and a LF
msg[2] = 0;
//------------------------------------------------------------------------
// QUEUE SEND
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
// prepare message to send
msgToSend[msgToSendPtr] = 0; // end of C string
msgToSendPtr = 0;
//------------------------------------------------------------------------
// MEMORY ALLOCATION
//------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
queueMsg.addr = gTokenInterface.destinationAddress;
queueMsg.sapi = CHAT_SAPI;
queueMsg.type = DATA_IND;
queueMsg.anyPtr = msg;
memcpy(msg,msgToSend,strlen(msgToSend)+1);
//------------------------------------------------------------------------
// QUEUE SEND
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
// just display char ---------------------------------------------------------
else if (msgToSendPtr < 250) // message size limit
{
//------------------------------------------------------------------------
// MEMORY ALLOCATION
//------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
queueMsg.type = CHAR_MSG;
queueMsg.anyPtr = msg;
msgToSend[msgToSendPtr] = queueMsg.addr;
msgToSendPtr++;
msg[0] = queueMsg.addr;
msg[1] = 0;
//------------------------------------------------------------------------
// QUEUE SEND
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
}
}

246
debug.c Normal file
View File

@ -0,0 +1,246 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file debug.c
/// \brief Debug thread (simulation of a connected station)
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "ext_led.h"
extern uint8_t gInBuffer[256]; // generic byte receive buffer
//////////////////////////////////////////////////////////////////////////////////
// THREAD DEBUG
//////////////////////////////////////////////////////////////////////////////////
void DebugStation(void *argument)
{
struct queueMsg_t queueMsg; // queue message
uint8_t * tokenPtr=0;
uint8_t * qPtr;
uint8_t checksum;
uint8_t statusByte;
uint8_t i;
uint8_t * msg;
uint8_t lastDebugAddress=0;
uint8_t waitForDataback=0;
const uint8_t debugMsg[] = "Msg from debug !";
osStatus_t retCode;
enum
{
isTOKEN, // a TOKEN frame is received
isSOURCE, // a SOURCE frame is received
isDEST, // a DEST. frame is received
isERROR, // a BAD frame is received
isBROADCAST,
}frameType;
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_dbg_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
qPtr = queueMsg.anyPtr;
if (qPtr[0]==TOKEN_TAG)
{
frameType = isTOKEN;
}
//----------------------------------------------------------------------------
else if ((qPtr[1]>>3) == gTokenInterface.debugAddress) // is a dest. frame
{
if(gTokenInterface.debugOnline != FALSE)
{
frameType = isDEST;
}
else
{
frameType = isERROR; // station not connected
}
}
//----------------------------------------------------------------------------
else if (qPtr[0]>>3 == gTokenInterface.debugAddress) // is it a source frame
{
frameType = isSOURCE;
}
//----------------------------------------------------------------------------
else if (qPtr[1]>>3 == BROADCAST_ADDRESS) // is it a broadcast
{
frameType = isBROADCAST;
}
//----------------------------------------------------------------------------
else // is unknow
{
frameType = isERROR;
}
switch(frameType)
{
//****************************************************************************
case isTOKEN:
qPtr[gTokenInterface.debugAddress+1] = (1 << TIME_SAPI);
if(gTokenInterface.debugOnline != FALSE)
{
qPtr[gTokenInterface.debugAddress+1] |= (1 << gTokenInterface.debugSAPI);
}
if(lastDebugAddress != gTokenInterface.debugAddress) // if address changed
{
qPtr[lastDebugAddress+1] = 0; // update last
lastDebugAddress = gTokenInterface.debugAddress; // set new<->last
}
//--------------------------------------------------------------------------
if(gTokenInterface.debugMsgToSend != FALSE)
{
waitForDataback = 1;
gTokenInterface.debugMsgToSend = FALSE;
tokenPtr = qPtr; // keep copy of token
//------------------------------------------------------------------------
// MEMORY ALLOCATION
//------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
msg[0] = (gTokenInterface.debugAddress << 3) | gTokenInterface.debugSAPI;
msg[1] = (gTokenInterface.myAddress << 3) | gTokenInterface.debugSAPI;
msg[2] = sizeof(debugMsg)-1;
memcpy(&msg[3],debugMsg,sizeof(debugMsg)-1);
checksum = 0;
for(i=0;i<(msg[2]+3);i++) // calculate checksum
checksum += msg[i];
if(gTokenInterface.needSendCRCError != FALSE)
{
checksum += 1;
printf(">> Debug send pseudo error <<\r\n");
}
else
{
printf(">> Debug send message ok <<\r\n");
}
checksum = checksum << 2;
msg[sizeof(debugMsg) -1 + 3] = checksum;
queueMsg.anyPtr = msg;
}
break;
//****************************************************************************
case isDEST:
statusByte = qPtr[qPtr[2] + 3];
//--------------------------------------------------------------------------
if((gTokenInterface.needReceiveCRCError != FALSE) && // pseudo error
((qPtr[1] && 0x03) == gTokenInterface.debugSAPI))
{
printf(">> Debug answer pseudo error <<\r\n");
qPtr[qPtr[2] + 3] |= 0x02; // set RD bit
qPtr[qPtr[2] + 3] &= 0xFE; // clear ACK bit
}
//--------------------------------------------------------------------------
else if((qPtr[1] && 0x03) == gTokenInterface.debugSAPI) // control is OK
{
checksum = 0;
for(i=0;i<(qPtr[2]+3);i++) // calculate checksum
checksum += qPtr[i];
checksum = checksum << 2;
if(checksum == (statusByte & 0xFC)) // checksum OK
{
printf(">> Debug answer ok <<\r\n");
qPtr[qPtr[2] + 3] |= 0x03; // set RD & ACK bits
}
else // checksum real error
{
printf(">> Debug answer error detected <<\r\n");
qPtr[qPtr[2] + 3] |= 0x02; // set RD bit
qPtr[qPtr[2] + 3] &= 0xFE; // clear ACK bit
}
}
//--------------------------------------------------------------------------
else // bad SAPI
{
}
break;
//****************************************************************************
case isSOURCE:
if(waitForDataback == 0) // I've send nothing ...
{
break;
}
waitForDataback = 0;
checksum = qPtr[qPtr[2] + 3];
switch(checksum & 0x03)
{
case 0x03: // all was OK
case 0x01: // or not RD
case 0x00: // or not RD
//------------------------------------------------------------------------
// MEMORY RELEASE
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,qPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
queueMsg.anyPtr = tokenPtr;
break;
case 0x02: // RD but not ACK
waitForDataback = 1;
//------------------------------------------------------------------------
// MEMORY RELEASE
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,qPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//------------------------------------------------------------------------
// MEMORY ALLOCATION
//------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
msg[0] = (gTokenInterface.debugAddress << 3) | gTokenInterface.debugSAPI;
msg[1] = (gTokenInterface.myAddress << 3) | gTokenInterface.debugSAPI;
msg[2] = sizeof(debugMsg)-1;
memcpy(&msg[3],debugMsg,sizeof(debugMsg)-1);
checksum = 0;
for(i=0;i<(msg[2]+3);i++) // calculate checksum
checksum += msg[i];
if(gTokenInterface.needSendCRCError != FALSE)
{
printf(">> Debug RE-send pseudo error <<\r\n");
checksum += 1;
}
else
{
printf(">> Debug RE-send without error <<\r\n");
}
checksum = checksum << 2;
msg[sizeof(debugMsg) -1 + 3] = checksum;
queueMsg.anyPtr = msg;
break;
}
break;
default: // IS Error or unknow
break;
}
osDelay(300); // wait 500 ms for simulation delay
qPtr = queueMsg.anyPtr;
if(qPtr[0] == TOKEN_TAG)
{
Ext_LED_PWM(1,100); // token is in station
}
queueMsg.type = FROM_PHY;
//----------------------------------------------------------------------------
// DEBUG DISPLAY FRAME
//----------------------------------------------------------------------------
DebugMacFrame('R',qPtr);
//----------------------------------------------------------------------------
// QUEUE SEND (send message to mac receiver)
//----------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macR_id,
&queueMsg,
osPriorityNormal,
0);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}

330
debuglayer.c Normal file
View File

@ -0,0 +1,330 @@
#include "armebs3.h" /* peripherals definitions */
#include "mezza_lcd\mezza_lcd.h" /* LCD Mezza library */
#include <tx_api.h> /* threadX def. header file */
#include <stdlib.h> /* std lib definitions file */
#include <stdio.h> /* standard IO functions */
#include <tokenring.h> /* tokenring constants */
/*--------------------------------------------------------------------------*/
/* EXTERNAL DEFINED GLOBAL VARIABLES */
/*--------------------------------------------------------------------------*/
extern UINT8 gDebugSend;
extern UINT8 gDebugAddress;
extern UINT8 gDebugSapi;
extern UINT8 gDebugSendCrcError;
extern UINT8 gDebugReceiveCrcError;
extern UINT8 gInBuffer[300];
extern UINT8 MYADDRESS;
extern TX_QUEUE gDebug_Q;
extern TX_EVENT_FLAGS_GROUP gEvents_E;
/****************************************************************************/
/* Name : CheckRetCodeDebug */
/*--------------------------------------------------------------------------*/
/* Inputs : retCode, lineNumber, mode */
/*--------------------------------------------------------------------------*/
/* Function : - displays the error when an error happends */
/****************************************************************************/
void CheckRetCodeDebug(UINT32 retCode,UINT32 lineNumber,UINT8 mode)
{
if(retCode != 0) /* when error occurs */
{
Debug("In Debugger line : ",lineNumber); /* display line number */
Debug("Error : ",retCode); /* with error number */
if (mode == HALT) /* when mode is HALT */
{
while(1){} /* stays here forever */
}
}
}
/****************************************************************************/
/* TaskName : DebugManager */
/*--------------------------------------------------------------------------*/
/* Function : - simulate a station with the tokenring interface */
/****************************************************************************/
void DebugManager(void)
{
HEADER msg;
UINT8 *ptr;
UINT8 *tokenPtr;
INT32 retCode;
UINT8 msgStr[]="Test Message from Debug !";
UINT8 srcControl;
UINT8 dstControl;
UINT8 size;
UINT8 checksum;
UINT8 i;
UINT8 lastDebugAddress;
UINT8 statusByte;
gDebugSend = 0;
gDebugAddress = 6;
gDebugSapi = 1;
gDebugSendCrcError = 0;
gDebugReceiveCrcError = 0;
lastDebugAddress = gDebugAddress;
/*------------------------------------------------------------------------*/
while(1) /* forever loop */
{
/*----------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>>>> QUEUE READ */
/*----------------------------------------------------------------------*/
retCode = tx_queue_receive(
&gDebug_Q,
&msg,
TX_WAIT_FOREVER);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
ptr = msg.data.ptr;
/*----------------------------------------------------------------------*/
/* TOKEN RECEIVED */
/*----------------------------------------------------------------------*/
if(*(ptr+1) == TOKEN)
{
ptr[gDebugAddress+2] = (1 << gDebugSapi); /* update dbg SAPI */
if(lastDebugAddress != gDebugAddress) /* if address changed */
{
ptr[lastDebugAddress+2] &= ~(1 << gDebugSapi); /* update last */
lastDebugAddress = gDebugAddress; /* set new<->last */
}
/*--------------------------------------------------------------------*/
/* WAIT TO SEND MSG */
/*--------------------------------------------------------------------*/
if(gDebugSend == 1)
{
gDebugSend = 0; /* stop send nxt time */
tokenPtr = ptr;
srcControl = (gDebugAddress << 3) + gDebugSapi;
dstControl = (MYADDRESS << 3) + gDebugSapi;
size = strlen(msgStr);
*gInBuffer = 0x02;
/*------------------------------------------------------------------*/
/* MSG CREATION */
/*------------------------------------------------------------------*/
*(gInBuffer+1) = srcControl;
*(gInBuffer+2) = dstControl;
*(gInBuffer+3) = size;
strcpy(gInBuffer+4,msgStr);
*(gInBuffer+3+size) = 0x0D;
checksum = 0;
for(i=0;i<size+3;i++)
checksum += *(gInBuffer+i+1);
*(gInBuffer+size+4) = checksum << 2;
*(gInBuffer+size+5) = 0x03;
/*------------------------------------------------------------------*/
if(gDebugSendCrcError == 1)
{
*(gInBuffer+size+4) += 4; /* simulate error CS */
}
/*------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> EVENT SET */
/*------------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
}
/*--------------------------------------------------------------------*/
/* NO MSG TO SEND */
/*--------------------------------------------------------------------*/
else /* token back */
{
for(i=0;i<19;i++)
{
gInBuffer[i] = *(ptr+i);
}
retCode = tx_byte_release((void*)ptr);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
/*------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> EVENT SET */
/*------------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
}
}
/*----------------------------------------------------------------------*/
/* DATABACK RECEIVED */
/*----------------------------------------------------------------------*/
else if (*(ptr+1)>>3 == gDebugAddress)
{
statusByte = *(ptr+*(ptr+3)+4);
statusByte &= 0x03;
/*--------------------------------------------------------------------*/
switch(statusByte)
{
/*------------------------------------------------------------------*/
/* RD = 1, ACK = 1 */
/*------------------------------------------------------------------*/
case 0x03: /* RD = 1, ACK = 1 */
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> MEMORY RELEASE */
/*----------------------------------------------------------------*/
retCode = tx_byte_release((void*)ptr);
for(i=0;i<19;i++)
{
gInBuffer[i] = *(tokenPtr+i);
}
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> MEMORY RELEASE */
/*----------------------------------------------------------------*/
retCode = tx_byte_release((void*)tokenPtr);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> EVENT SET */
/*----------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
break;
/*------------------------------------------------------------------*/
/* RD = 1, ACK = 0 */
/*------------------------------------------------------------------*/
case 0x02: /* RD = 1, ACK = 0 */
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> MEMORY RELEASE */
/*----------------------------------------------------------------*/
retCode = tx_byte_release((void*)ptr);
srcControl = (gDebugAddress << 3) + gDebugSapi;
dstControl = (MYADDRESS << 3) + CHAT_SAPI;
size = strlen(msgStr);
*gInBuffer = 0x02;
*(gInBuffer+1) = srcControl;
*(gInBuffer+2) = dstControl;
*(gInBuffer+3) = size;
strcpy(gInBuffer+4,msgStr);
*(gInBuffer+3+size) = 0x0D;
checksum = 0;
for(i=0;i<size+3;i++)
checksum += *(gInBuffer+i+1);
*(gInBuffer+size+4) = checksum << 2;
*(gInBuffer+size+5) = 0x03;
/*----------------------------------------------------------------*/
if(gDebugSendCrcError == 1)
{
*(gInBuffer+size+4) += 4; /* simulate error CS */
}
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> EVENT SET */
/*----------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
Debug("DBL>> MESSAGE ACK ERROR -> SEND MESSAGE AGAIN ",0);
break;
/*------------------------------------------------------------------*/
/* RD = 0, ACK = x */
/*------------------------------------------------------------------*/
case 0x01: /* RD = 0, ACK = 1 */
case 0x00: /* RD = 0, ACK = 0 */
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> MEMORY RELEASE */
/*----------------------------------------------------------------*/
retCode = tx_byte_release((void*)ptr);
for(i=0;i<19;i++)
{
gInBuffer[i] = *(tokenPtr+i);
}
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> MEMORY RELEASE */
/*----------------------------------------------------------------*/
retCode = tx_byte_release((void*)tokenPtr);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
/*----------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>> EVENT SET */
/*----------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
Debug("DBL>> MESSAGE NOT READ -> SEND BACK TOKEN ",0);
break;
}
}
/*----------------------------------------------------------------------*/
/* MESSAGE RECEIVED */
/*----------------------------------------------------------------------*/
else if (*(ptr+2)>>3 == gDebugAddress)
{
statusByte = *(ptr+*(ptr+3)+4);
/*--------------------------------------------------------------------*/
if((gDebugReceiveCrcError == 1) && /* pseudo error */
((*(ptr+2) && 0x03) == gDebugSapi))
{
*(ptr+*(ptr+3)+4) |= 0x02; /* set RD bit */
*(ptr+*(ptr+3)+4) &= 0xFE; /* clear ACK bit */
Debug("DBL>> PSEUDO ACK ERROR ",0);
}
/*--------------------------------------------------------------------*/
else if((*(ptr+2) && 0x03) == gDebugSapi) /* control is OK */
{
checksum = 0;
for(i=0;i<*(ptr+3)+3;i++) /* calculate checksum */
checksum += *(ptr+i+1);
checksum = checksum << 2;
if(checksum == (statusByte & 0xFC))
{
*(ptr+*(ptr+3)+4) = statusByte | 0x03; /* RD = 1, ACK = 1 */
Debug("DBL>> ACK OK ",0);
}
else
{
*(ptr+*(ptr+3)+4) = statusByte | 0x02; /* RD = 1, ACK = 0 */
Debug("DBL>> ACK ERROR ",0);
}
}
/*--------------------------------------------------------------------*/
else /* bad SAPI */
{
Debug("DBL>> BAD SAPI ",0);
}
for(i=0;i<*(ptr+3)+6;i++)
{
gInBuffer[i] = *(ptr+i);
}
/*--------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> MEMORY RELEASE */
/*--------------------------------------------------------------------*/
retCode = tx_byte_release((void*)ptr);
/*--------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> EVENT SET */
/*--------------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
}
/*----------------------------------------------------------------------*/
/* ANOTHER FRAME */
/*----------------------------------------------------------------------*/
else
{
for(i=0;i<*(ptr+3)+6;i++) /* copy frame */
{
gInBuffer[i] = *(ptr+i);
}
/*--------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> MEMORY RELEASE */
/*--------------------------------------------------------------------*/
retCode = tx_byte_release((void*)ptr);
/*--------------------------------------------------------------------*/
/* TX_CALL >>>>>>>>>>>>>>> EVENT SET */
/*--------------------------------------------------------------------*/
retCode = tx_event_flags_set(
&gEvents_E,
RS232_FR_EVENT,
TX_OR);
CheckRetCodeDebug(retCode,__LINE__,CONTINUE);
}
}
}

89
gfxconf.h Normal file
View File

@ -0,0 +1,89 @@
#ifndef _GFXCONF_H
#define _GFXCONF_H
///////////////////////////////////////////////////////////////////////////
// GOS //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_OS_UNKNOWN TRUE
#define GFX_OS_HEAP_SIZE 0
#define GFX_COMPILER GFX_COMPILER_KEIL
#define GFX_CPU GFX_CPU_CORTEX_M7_FP
#define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN
///////////////////////////////////////////////////////////////////////////
// GDISP //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GDISP TRUE
#define GDISP_NEED_MULTITHREAD TRUE
#define GDISP_NEED_CONTROL TRUE
#define GDISP_NEED_STARTUP_LOGO FALSE
#define GDISP_STARTUP_COLOR HTML2COLOR(0x000000)
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_0
#define GDISP_NEED_TEXT TRUE
#define GDISP_NEED_TEXT_WORDWRAP TRUE
#define GDISP_INCLUDE_USER_FONTS TRUE
#define GDISP_NEED_IMAGE TRUE
#define GDISP_NEED_IMAGE_BMP TRUE
///////////////////////////////////////////////////////////////////////////
// GWIN //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GWIN TRUE
#define GWIN_NEED_WINDOWMANAGER TRUE
#define GWIN_NEED_WIDGET TRUE
#define GWIN_NEED_CHECKBOX TRUE
#define GWIN_NEED_IMAGE TRUE
#define GWIN_NEED_LABEL TRUE
#define GWIN_NEED_BUTTON TRUE
#define GWIN_WIDGET_TAGS TRUE
#define GWIN_NEED_CONTAINERS TRUE
#define GWIN_NEED_CONTAINER TRUE
///////////////////////////////////////////////////////////////////////////
// GEVENT //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GEVENT TRUE
///////////////////////////////////////////////////////////////////////////
// GTIMER //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GTIMER TRUE
///////////////////////////////////////////////////////////////////////////
// GQUEUE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GQUEUE TRUE
#define GQUEUE_NEED_ASYNC TRUE
///////////////////////////////////////////////////////////////////////////
// GINPUT //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GINPUT TRUE
#define GINPUT_NEED_MOUSE TRUE
///////////////////////////////////////////////////////////////////////////
// GFILE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GFILE TRUE
#define GFILE_NEED_ROMFS TRUE
#define GFILE_MAX_GFILES 50
#endif // _GFXCONF_H

1088
gui.c Normal file

File diff suppressed because it is too large Load Diff

138
gui.h Normal file
View File

@ -0,0 +1,138 @@
#ifndef _GUI_H
#define _GUI_H
#include <stdbool.h>
#include "gfx.h"
typedef enum guiPage {
STARTUP,
MAINDISPLAY,
CONFIGDISPLAY,
ADDRESSSELECTDISPLAY,
} guiPage;
// Widget tags
#define GHPAGECONTAINERSTARTUP_TAG 0
#define GHPAGECONTAINERMAINDISPLAY_TAG 0
#define GHPAGECONTAINERCONFIGDISPLAY_TAG 0
#define GHPAGECONTAINERADDRESSSELECTDISPLAY_TAG 0
#define GHLABEL_1_TAG 0
#define GHLABEL_TAG 0
#define BTNTOKEN_TAG 0
#define BTNSTART_TAG 0
#define GHIMAGEBOX_TAG 0
#define GHLABEL_4_TAG 0
#define GHLABEL_2_TAG 0
#define GHLABEL_3_TAG 0
#define BTNDESTINATION_TAG 0
#define BTNCONFIGURATION_TAG 0
#define LBLTIME_TAG 0
#define LBLLIST_TAG 0
#define BTNSENDTOKEN_TAG 0
#define CBBROADCASTTIME_TAG 0
#define BTNSENDDEBUG_TAG 0
#define GHLABEL_5_TAG 0
#define GHLABEL_8_TAG 0
#define GHLABEL_7_TAG 0
#define GHLABEL_6_TAG 0
#define CBCONNECTOED_TAG 0
#define CBDEBUGCONNECTED_TAG 0
#define CBRECCRCERROR_TAG 0
#define CBSENDCRCERROR_TAG 0
#define LBLADDRESS_TAG 0
#define LBLDEBUG_TAG 0
#define BTNSAPIMINUS_TAG 0
#define BTNADDRESSMINUS_TAG 0
#define LBLSAPI_TAG 0
#define LBLADDR_TAG 0
#define BTNSAPIPLUS_TAG 0
#define BTNADDRESSPLUS_TAG 0
#define BTNBACK_TAG 0
#define GHLABEL_11_TAG 0
#define GHRADIOBUTTON_TAG 0
#define GHRADIOBUTTON_1_TAG 1
#define GHRADIOBUTTON_2_TAG 2
#define GHRADIOBUTTON_3_TAG 3
#define GHRADIOBUTTON_4_TAG 4
#define GHRADIOBUTTON_5_TAG 5
#define GHRADIOBUTTON_6_TAG 6
#define GHRADIOBUTTON_7_TAG 7
#define GHRADIOBUTTON_8_TAG 8
#define GHRADIOBUTTON_9_TAG 9
#define GHRADIOBUTTON_10_TAG 10
#define GHRADIOBUTTON_11_TAG 11
#define GHRADIOBUTTON_12_TAG 12
#define GHRADIOBUTTON_13_TAG 13
#define GHRADIOBUTTON_14_TAG 14
#define GHRADIOBUTTON_15_TAG 15
#define BTNSELECT_TAG 0
// Widget handles
extern GHandle ghPageContainerStartup;
extern GHandle ghPageContainerMainDisplay;
extern GHandle ghPageContainerConfigDisplay;
extern GHandle ghPageContainerAddressSelectDisplay;
extern GHandle ghLabel_1;
extern GHandle ghLabel;
extern GHandle btnToken;
extern GHandle btnStart;
extern GHandle ghImagebox;
extern GHandle ghLabel_4;
extern GHandle ghLabel_2;
extern GHandle ghLabel_3;
extern GHandle btnDestination;
extern GHandle btnConfiguration;
extern GHandle lblTime;
extern GHandle cnslSend;
extern GHandle cnslReceive;
extern GHandle lblList;
extern GHandle btnSendToken;
extern GHandle cbBroadcastTime;
extern GHandle btnSendDebug;
extern GHandle ghLabel_5;
extern GHandle ghLabel_8;
extern GHandle ghLabel_7;
extern GHandle ghLabel_6;
extern GHandle cbConnectoed;
extern GHandle cbDebugConnected;
extern GHandle cbRecCRCError;
extern GHandle cbSendCRCError;
extern GHandle lblAddress;
extern GHandle lblDebug;
extern GHandle btnSAPIMinus;
extern GHandle btnADDRESSMinus;
extern GHandle lblSAPI;
extern GHandle lblADDR;
extern GHandle btnSAPIPlus;
extern GHandle btnADDRESSPlus;
extern GHandle btnBack;
extern GHandle ghLabel_11;
extern GHandle ghRadiobutton;
extern GHandle ghRadiobutton_1;
extern GHandle ghRadiobutton_2;
extern GHandle ghRadiobutton_3;
extern GHandle ghRadiobutton_4;
extern GHandle ghRadiobutton_5;
extern GHandle ghRadiobutton_6;
extern GHandle ghRadiobutton_7;
extern GHandle ghRadiobutton_8;
extern GHandle ghRadiobutton_9;
extern GHandle ghRadiobutton_10;
extern GHandle ghRadiobutton_11;
extern GHandle ghRadiobutton_12;
extern GHandle ghRadiobutton_13;
extern GHandle ghRadiobutton_14;
extern GHandle ghRadiobutton_15;
extern GHandle btnSelect;
#ifdef __cplusplus
extern "C" {
#endif
bool_t guiInit(void);
void guiShowPage(guiPage page);
#ifdef __cplusplus
}
#endif
#endif // _GUI_H

157
i2c.c Normal file
View File

@ -0,0 +1,157 @@
/**
******************************************************************************
* File Name : I2C.c
* Description : This file provides code for the configuration
* of the I2C instances.
******************************************************************************
** This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* COPYRIGHT(c) 2018 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "i2c.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
I2C_HandleTypeDef hi2c3;
/* I2C3 init function */
void MX_I2C3_Init(void)
{
hi2c3.Instance = I2C3;
hi2c3.Init.Timing = 0x00501E63;
hi2c3.Init.OwnAddress1 = 0;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c3) != HAL_OK)
{
for(;;){}
}
/**Configure Analogue filter
*/
if (HAL_I2CEx_ConfigAnalogFilter(&hi2c3, I2C_ANALOGFILTER_DISABLE) != HAL_OK)
{
for(;;){}
}
/**Configure Digital filter
*/
if (HAL_I2CEx_ConfigDigitalFilter(&hi2c3, 0) != HAL_OK)
{
for(;;){}
}
}
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(i2cHandle->Instance==I2C3)
{
/* USER CODE BEGIN I2C3_MspInit 0 */
/* USER CODE END I2C3_MspInit 0 */
/**I2C3 GPIO Configuration
PC9 ------> I2C3_SDA
PA8 ------> I2C3_SCL
*/
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* I2C3 clock enable */
__HAL_RCC_I2C3_CLK_ENABLE();
/* USER CODE BEGIN I2C3_MspInit 1 */
/* USER CODE END I2C3_MspInit 1 */
}
}
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
{
if(i2cHandle->Instance==I2C3)
{
/* USER CODE BEGIN I2C3_MspDeInit 0 */
/* USER CODE END I2C3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_I2C3_CLK_DISABLE();
/**I2C3 GPIO Configuration
PC9 ------> I2C3_SDA
PA8 ------> I2C3_SCL
*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_9);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8);
/* USER CODE BEGIN I2C3_MspDeInit 1 */
/* USER CODE END I2C3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

81
i2c.h Normal file
View File

@ -0,0 +1,81 @@
/**
******************************************************************************
* File Name : I2C.h
* Description : This file provides code for the configuration
* of the I2C instances.
******************************************************************************
** This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* COPYRIGHT(c) 2018 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __i2c_H
#define __i2c_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern I2C_HandleTypeDef hi2c3;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
extern void _Error_Handler(char *, int);
void MX_I2C3_Init(void);
/* USER CODE BEGIN Prototypes */
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /*__ i2c_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

382
lcd.c Normal file
View File

@ -0,0 +1,382 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file touch.c
/// \brief LCD control thread
/// \author Pascal Sartoretti (pascal dot sartoretti at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
GListener gl;
//////////////////////////////////////////////////////////////////////////////////
// THREAD LCD
//////////////////////////////////////////////////////////////////////////////////
void LCD(void *argument)
{
struct queueMsg_t queueMsg; // message queue
GEvent* pe; // uGFX event
char tmpMsg[] = {0,0,0,0,0}; // to send chars
char * msgPtr; // any pointer of string
char tempStr[30]; // temp string usage
char smallStr[5];
osStatus_t retCode;
uint8_t i;
GHandle tmpHndl;
// const char escapeBlack[] = {0x1B,'0',0};
const char escapeRed[] = {0x1B,'1',0};
const char escapeGreen[] = {0x1B,'2',0};
const char escapeBold[] = {0x1B,'b',0};
const char escapeNoBold[] = {0x1B,'B',0};
const char escapeUnderline[] = {0x1B,'u',0};
const char escapeNoUnderline[] = {0x1B,'U',0};
const char escapeBlue[] = {0x1B,'4',0};
// const char escapeWhite[] = {0x1B,'7',0};
//------------------------------------------------------------------------------
// Init the LCD and create Touch thread after
//------------------------------------------------------------------------------
gfxInit(); // init LCD screen
gdispClear(White); // clear it
gwinSetDefaultFont(gdispOpenFont("DejaVuSans12_aa"));
gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE);
guiInit(); // create interface
geventListenerInit(&gl); // init listener
gwinAttachListener(&gl); // listen to LCD touch events
guiShowPage(STARTUP); // first window
//------------------------------------------------------------------------------
// special setup inits (not made in ugfx-studio)
//------------------------------------------------------------------------------
gwinSetColor(cnslSend,Black);
gwinSetBgColor(cnslSend,White);
gwinSetColor(cnslReceive,Black);
gwinSetBgColor(cnslReceive,White);
sprintf(tempStr,"%d",gTokenInterface.destinationAddress+1);
gwinSetText(btnDestination, tempStr, TRUE);
sprintf(tempStr,"%d",gTokenInterface.debugAddress+1);
gwinSetText(lblADDR, tempStr, TRUE);
sprintf(tempStr," %d",gTokenInterface.debugSAPI);
gwinSetText(lblSAPI, tempStr, TRUE);
sprintf(tempStr,"Local address is: %d",gTokenInterface.myAddress+1);
gwinSetText(lblAddress, tempStr, TRUE);
#if DEBUG_MODE == 0
sprintf(tempStr,"Debug mode is: OFF");
gwinSetText(lblDebug, tempStr, TRUE);
gwinDisable(cbDebugConnected);
gwinDisable(cbRecCRCError);
gwinDisable(cbSendCRCError);
gwinDisable(btnADDRESSMinus);
gwinDisable(btnADDRESSPlus);
gwinDisable(btnSAPIMinus);
gwinDisable(btnSAPIPlus);
gwinDisable(lblSAPI);
gwinDisable(lblADDR);
gwinDisable(btnSendDebug);
#else
sprintf(tempStr,"Debug mode is: ON");
gwinSetText(lblDebug, tempStr, TRUE);
#endif
//------------------------------------------------------------------------------
for(;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_lcd_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
switch(queueMsg.type) // check message
{
//**************************************************************************
case TOUCH_EVENT: // event from touchscreen
pe = queueMsg.anyPtr;
switch(pe->type)
{
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
case GEVENT_GWIN_BUTTON: // button has been pressed
tmpHndl = ((GEventGWinButton*)pe)->gwin;
//----------------------------------------------------------------------
if((tmpHndl == btnToken)|| // leave startup window
(tmpHndl == btnStart))
{
gTokenInterface.currentView = MAINDISPLAY;
guiShowPage(MAINDISPLAY);
}
//----------------------------------------------------------------------
if(tmpHndl == btnDestination) // enter address select window
{
gTokenInterface.currentView = ADDRESSSELECTDISPLAY;
guiShowPage(ADDRESSSELECTDISPLAY);
}
//----------------------------------------------------------------------
if(tmpHndl == btnConfiguration) // enter config window
{
gTokenInterface.currentView = CONFIGDISPLAY;
guiShowPage(CONFIGDISPLAY);
}
//----------------------------------------------------------------------
if((tmpHndl == btnBack)|| // leave config window
(tmpHndl == btnSendDebug))
{
gTokenInterface.currentView = MAINDISPLAY;
guiShowPage(MAINDISPLAY);
}
//----------------------------------------------------------------------
if(tmpHndl == btnSelect) // destination changed
{
if(gTokenInterface.destinationAddress != 15)
{
sprintf(tempStr,"%d",gTokenInterface.destinationAddress+1);
}
else
{
sprintf(tempStr,"All");
}
gwinSetText(btnDestination, tempStr, TRUE); // display it on widget
gTokenInterface.currentView = MAINDISPLAY;
guiShowPage(MAINDISPLAY);
}
//----------------------------------------------------------------------
if(tmpHndl == btnSAPIMinus) // SAPI changed
{
if(gTokenInterface.debugSAPI > 0)
{
gTokenInterface.debugSAPI--;
tmpMsg[0] = ' ';
tmpMsg[1] = gTokenInterface.debugSAPI + '0';
tmpMsg[2] = 0;
gwinSetText(lblSAPI, tmpMsg, TRUE);
}
}
//----------------------------------------------------------------------
if(tmpHndl == btnSAPIPlus) // SAPI changed
{
if(gTokenInterface.debugSAPI < 7)
{
gTokenInterface.debugSAPI++;
tmpMsg[0] = ' ';
tmpMsg[1] = gTokenInterface.debugSAPI + '0';
tmpMsg[2] = 0;
gwinSetText(lblSAPI, tmpMsg, TRUE);
}
}
//----------------------------------------------------------------------
if(tmpHndl == btnADDRESSMinus) // address changed
{
if(gTokenInterface.debugAddress > 0)
{
gTokenInterface.debugAddress--;
if(gTokenInterface.debugAddress == gTokenInterface.myAddress)
{
if(gTokenInterface.debugAddress > 0)
{
gTokenInterface.debugAddress--;
}
else
{
gTokenInterface.debugAddress++;
}
}
if(gTokenInterface.debugAddress > 8)
{
sprintf(tmpMsg,"%d",(int)gTokenInterface.debugAddress+1);
}
else
{
sprintf(tmpMsg," %d",(int)gTokenInterface.debugAddress+1);
}
gwinSetText(lblADDR, tmpMsg, TRUE);
}
}
//----------------------------------------------------------------------
if(tmpHndl == btnADDRESSPlus) // address changed
{
if(gTokenInterface.debugAddress < 14)
{
gTokenInterface.debugAddress++;
if(gTokenInterface.debugAddress == gTokenInterface.myAddress)
{
if(gTokenInterface.debugAddress < 14)
{
gTokenInterface.debugAddress++;
}
else
{
gTokenInterface.debugAddress--;
}
}
if(gTokenInterface.debugAddress > 8)
{
sprintf(tmpMsg,"%d",(int)gTokenInterface.debugAddress+1);
}
else
{
sprintf(tmpMsg," %d",(int)gTokenInterface.debugAddress+1);
}
gwinSetText(lblADDR, tmpMsg, TRUE);
}
}
break;
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
case GEVENT_GWIN_CHECKBOX: // checkbox has been pressed
tmpHndl = ((GEventGWinButton*)pe)->gwin;
//----------------------------------------------------------------------
if(tmpHndl == cbConnectoed) // connection changed
{
gTokenInterface.connected = gwinCheckboxIsChecked(cbConnectoed);
}
//----------------------------------------------------------------------
if(tmpHndl == cbBroadcastTime) // broadcast time changed
{
gTokenInterface.broadcastTime = gwinCheckboxIsChecked(cbBroadcastTime);
}
//----------------------------------------------------------------------
if(tmpHndl == cbDebugConnected) // debug connected changed
{
gTokenInterface.debugOnline = gwinCheckboxIsChecked(cbDebugConnected);
}
//----------------------------------------------------------------------
if(tmpHndl == cbRecCRCError) // receive CRC error changed
{
gTokenInterface.needReceiveCRCError = gwinCheckboxIsChecked(cbRecCRCError);
}
//----------------------------------------------------------------------
if(tmpHndl == cbSendCRCError) // send CRC error changed
{
gTokenInterface.needSendCRCError = gwinCheckboxIsChecked(cbSendCRCError);
}
break;
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
case GEVENT_GWIN_RADIO: // radio button has been pressed
tmpHndl = ((GEventGWinButton*)pe)->gwin;
//----------------------------------------------------------------------
gTokenInterface.destinationAddress = gwinGetTag(tmpHndl);
break;
}
break;
//**************************************************************************
case TIME_MSG: // needs to display the time
msgPtr = queueMsg.anyPtr;
sprintf(tempStr,"Time is: %s",msgPtr); // create string
gwinSetText(lblTime, tempStr, TRUE); // display it on widget
//------------------------------------------------------------------------
// MEMORY RELEASE (time frame from timeReceiver)
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,msgPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//------------------------------------------------------------------------
// set event flag to audio player
//------------------------------------------------------------------------
retCode = osEventFlagsSet(eventFlag_id, AUDIO_CLOCK_EVT); // set flag
if(retCode < 0)
{
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
break;
//--------------------------------------------------------------------------
case CHAR_MSG: // a char has been pressed
msgPtr = queueMsg.anyPtr;
gwinPutString(cnslSend,msgPtr); // display char
//------------------------------------------------------------------------
// MEMORY RELEASE (character from chatSender)
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,msgPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
break;
//--------------------------------------------------------------------------
case CHAT_MSG: // a message is incoming
if(gTokenInterface.currentView != MAINDISPLAY)
{
guiShowPage(MAINDISPLAY);
}
msgPtr = queueMsg.anyPtr;
sprintf(tempStr,"Msg from : %d\r\n",queueMsg.addr+1);
gwinPutString(cnslReceive,escapeBlue);
gwinPutString(cnslReceive,escapeUnderline);
gwinPutString(cnslReceive,tempStr);
gwinPutString(cnslReceive,escapeNoUnderline);
gwinPutString(cnslReceive,escapeGreen);
gwinPutString(cnslReceive,msgPtr);
gwinPutString(cnslReceive,"\r\n");
//------------------------------------------------------------------------
// MEMORY RELEASE (message from chatReceiver)
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,msgPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//------------------------------------------------------------------------
// set event flag to audio player
//------------------------------------------------------------------------
retCode = osEventFlagsSet(eventFlag_id, AUDIO_MSG_EVT); // set flag
if(retCode < 0)
{
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
break;
//--------------------------------------------------------------------------
case MAC_ERROR: // a communication error occurs
if(gTokenInterface.currentView != MAINDISPLAY)
{
guiShowPage(MAINDISPLAY);
}
msgPtr = queueMsg.anyPtr;
gwinPutString(cnslReceive,escapeRed);
gwinPutString(cnslReceive,escapeBold);
gwinPutString(cnslReceive,msgPtr);
gwinPutString(cnslReceive,escapeNoBold);
//------------------------------------------------------------------------
// MEMORY RELEASE (message from macSenderReceiver)
//------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,msgPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//------------------------------------------------------------------------
// set event flag to audio player
//------------------------------------------------------------------------
retCode = osEventFlagsSet(eventFlag_id, AUDIO_ERROR_EVT); // set flag
if(retCode < 0)
{
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
break;
//--------------------------------------------------------------------------
case TOKEN_LIST: // token list update
sprintf(tempStr,"Online stations: "); // create string
for(i=0;i<15;i++)
{
//----------------------------------------------------------------------
// Not connected station
//----------------------------------------------------------------------
if((gTokenInterface.station_list[i] & (1 << CHAT_SAPI)) == 0)
{
// station not connected
}
//----------------------------------------------------------------------
// Any station number connected (CHAT_SAPI)
//----------------------------------------------------------------------
else
{
sprintf(smallStr,"%d, ",i+1);
strcat(tempStr,smallStr);
}
}
tempStr[strlen(tempStr)-2] = 0; // discare last ', '
gwinSetText(lblList, tempStr, TRUE); // display it on widget
break;
//------------------------------------------------------------------------------
default:
break;
} // end of SWITCH
} // end of forever
}

5
mac_receiver.c Normal file
View File

@ -0,0 +1,5 @@
void MacReceiver(void *argument)
{
// TODO
}

5
mac_sender.c Normal file
View File

@ -0,0 +1,5 @@
void MacSender(void *argument)
{
// TODO
}

412
main.c Normal file
View File

@ -0,0 +1,412 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file main.c
/// \brief Tokenring intialisation
/// \author Pascal Sartoretti (pascal dot sartoretti at hevs dot ch)
/// \version 1.0 - original for RTX5
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include "main.h" // tokenring constants
#include "ext_led.h"
#include "ext_uart.h"
#include "EventRecorder.h"
//--------------------------------------------------------------------------------
// Global variable for system control
//--------------------------------------------------------------------------------
struct TOKENINTERFACE gTokenInterface;
//--------------------------------------------------------------------------------
// Memory pool
//--------------------------------------------------------------------------------
osMemoryPoolId_t memPool;
//--------------------------------------------------------------------------------
// Event flag
//--------------------------------------------------------------------------------
osEventFlagsId_t eventFlag_id;
//--------------------------------------------------------------------------------
// Queues id and attributes
//--------------------------------------------------------------------------------
osMessageQueueId_t queue_macR_id;
osMessageQueueId_t queue_phyS_id;
osMessageQueueId_t queue_dbg_id;
osMessageQueueId_t queue_macS_id;
osMessageQueueId_t queue_chatR_id;
osMessageQueueId_t queue_chatS_id;
osMessageQueueId_t queue_timeR_id;
osMessageQueueId_t queue_timeS_id;
osMessageQueueId_t queue_lcd_id;
osMessageQueueId_t queue_keyboard_id;
osMessageQueueId_t queue_usartR_id;
const osMessageQueueAttr_t queue_macR_attr = {
.name = "MAC_RECEIVER"
};
const osMessageQueueAttr_t queue_macS_attr = {
.name = "MAC_SENDER"
};
const osMessageQueueAttr_t queue_phyS_attr = {
.name = "PH_SENDER "
};
const osMessageQueueAttr_t queue_dbg_attr = {
.name = "DEBUGGER "
};
const osMessageQueueAttr_t queue_chatR_attr = {
.name = "CHAT_REC "
};
const osMessageQueueAttr_t queue_timeR_attr = {
.name = "TIME_RECEIVE"
};
const osMessageQueueAttr_t queue_timeS_attr = {
.name = "TIME_SENDER "
};
const osMessageQueueAttr_t queue_chatS_attr = {
.name = "CHAT_SENDER "
};
const osMessageQueueAttr_t queue_lcd_attr = {
.name = "LCD MANAGER "
};
const osMessageQueueAttr_t queue_keyboard_attr = {
.name = "KEYBOARD "
};
const osMessageQueueAttr_t queue_usartR_attr = {
.name = "USART_RECEIV"
};
//--------------------------------------------------------------------------------
// External threads id, functions and attributes
//--------------------------------------------------------------------------------
osThreadId_t phy_rec_id;
osThreadId_t phy_snd_id;
osThreadId_t mac_rec_id;
osThreadId_t mac_snd_id;
osThreadId_t time_rec_id;
osThreadId_t time_snd_id;
osThreadId_t chat_rec_id;
osThreadId_t chat_snd_id;
osThreadId_t debug_id;
osThreadId_t touch_id;
osThreadId_t lcd_id;
osThreadId_t audio_id;
extern void PhReceiver(void *argument);
extern void PhSender(void *argument);
extern void MacReceiver(void *argument);
extern void MacSender(void *argument);
extern void TimeReceiver(void *argument);
extern void TimeSender(void *argument);
extern void ChatReceiver(void *argument);
extern void ChatSender(void *argument);
extern void DebugStation(void *argument);
extern void Touch(void *argument);
extern void LCD(void *argument);
extern void AudioPlayer(void *argument);
const osThreadAttr_t audio_attr = {
.stack_size = 512,
.priority = osPriorityAboveNormal,
.name = "AUDIO"
};
const osThreadAttr_t debug_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "DBG"
};
const osThreadAttr_t phy_rec_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "PHY_R"
};
const osThreadAttr_t phy_snd_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "PH_S"
};
const osThreadAttr_t mac_rec_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "MAC_R"
};
const osThreadAttr_t mac_snd_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "MAC_S"
};
const osThreadAttr_t time_rec_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "TIME_RECEIVER"
};
const osThreadAttr_t time_snd_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "TIME_SENDER"
};
const osThreadAttr_t chat_rec_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "CHAT_RECEIVER"
};
const osThreadAttr_t chat_snd_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "CHAT_SENDER"
};
const osThreadAttr_t touch_attr = {
.stack_size = 512,
.priority = osPriorityNormal,
.name = "TOUCH"
};
const osThreadAttr_t lcd_attr = {
.stack_size = 4096,
.priority = osPriorityNormal,
.name = "LCD"
};
const osThreadAttr_t tester_attr = {
.stack_size = 256,
.priority = osPriorityNormal,
.name = "TESTER"
};
//////////////////////////////////////////////////////////////////////////////////
/// \brief Display a frame of type PHY
/// \param stringP pointer to physical frame to display
/// It is used by PHY_SENDER and PHY_RECEIVER
//////////////////////////////////////////////////////////////////////////////////
void DebugFrame(char * stringP)
{
uint8_t temp; // used for temp calculation
uint8_t byte; // used for temp byte memory
uint8_t table[16] = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
uint32_t size; // get size of frame
uint32_t i; // temporary counter
if ((uint8_t)stringP[1] == TOKEN_TAG) // is it a TOKEN frame
{
size = TOKENSIZE; // size is TOKENSIZE
}
else
{
size = stringP[3] + 6; // calculate size of frame
}
i = 0;
putchar('['); // display an open bracket
for(i=0;i<size;i++)
{
byte = stringP[i]; // get byte from frame
temp = (byte & 0xF0) >> 4;
putchar(table[temp]); // display 2 hex digits
temp = (byte & 0x0F);
putchar(table[temp]);
putchar(' '); // insert a space
}
putchar(']'); // display a closed bracket
putchar(0x0D); // with a <CR>
putchar(0x0A); // with a <CR>
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Display a frame of type MAC to the PC serial port for debug
/// \param preChar the char to write before the message
/// \param strinP pointer to the message of type MAC !!!
/// It is used by PHY_SENDER and DEBUG
//////////////////////////////////////////////////////////////////////////////////
void DebugMacFrame(uint8_t preChar,uint8_t * stringP)
{
uint8_t temp; // used for temp calculation
uint8_t byte; // used for temp byte memory
uint8_t table[16] = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
uint32_t size; // get size of frame
uint32_t i; // temporary counter
if (stringP[0] == TOKEN_TAG) // is it a TOKEN frame
{
size = TOKENSIZE - 2; //size is TOKENSIZE
}
else
{
size = stringP[2] + 4; // calculate size of frame
}
i = 0;
putchar(preChar);
putchar('-');
putchar('['); // display an open bracket
for(i=0;i<size;i++)
{
byte = stringP[i]; // get byte from frame
temp = (byte & 0xF0) >> 4;
putchar(table[temp]); // display 2 hex digits
temp = (byte & 0x0F);
putchar(table[temp]);
putchar(' '); // insert a space
}
putchar(']'); // display a closed bracket
putchar('\r'); // with a <CR>
putchar('\n'); // and a <LF> to flush buffer
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Check OS call return codes and display error if any
/// \param retCode return code to control
/// \param lineNumber the line number where was the error
/// \param fileName the filename where is the error
/// \param mode If not 0 (CONTINUE), the program stays in this function
//////////////////////////////////////////////////////////////////////////////////
void CheckRetCode(uint32_t retCode,uint32_t lineNumber,char * fileName,uint8_t mode)
{
if(retCode != osOK) // if an error occur
{
printf("At line : %d\r\n",lineNumber); // display line error
printf("On file : %s \r\n",fileName);
printf("Error : %d\r\n",retCode); // displays error number
if (mode != CONTINUE) // if mode is not CONTINUE (0)
{
while(1){} // stays here forever
}
}
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Configure the clock @ 216MHz and peripheral clocks
//////////////////////////////////////////////////////////////////////////////////
static void SystemClock_Config (void) {
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct;
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 432;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Activate the OverDrive to reach the 216 MHz Frequency */
HAL_PWREx_EnableOverDrive();
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct);
RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SAI2;
RCC_ExCLKInitStruct.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLI2S;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SP = 8;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 344;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SQ = 7;
RCC_ExCLKInitStruct.PLLI2SDivQ = 1;
HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct);
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Used by HAL for delays (have to return system ticks)
//////////////////////////////////////////////////////////////////////////////////
uint32_t HAL_GetTick(void)
{
return osKernelGetTickCount();
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Init all and start RTX5
//////////////////////////////////////////////////////////////////////////////////
int main(void)
{
SystemClock_Config();
EventRecorderInitialize(EventRecordAll,0);
EventRecorderDisable(EventRecordAPI, 0xF1, 0xF1); // remove Kernel messages
EventRecorderDisable(EventRecordAll, 0xF4, 0xF4); // remove EventFlag messages
EventRecorderStart();
osKernelInitialize();
Ext_LED_Init();
Ext_UART_Init(9600); // Initialize UART @ 9600 bauds
//------------------------------------------------------------------------------
// Default configuration station
//------------------------------------------------------------------------------
gTokenInterface.myAddress = MYADDRESS; // constant from main.h
gTokenInterface.connected = TRUE; // default is station connected
Ext_LED_PWM(8,100); // display connected
gTokenInterface.debugAddress = 9; // default values
gTokenInterface.debugSAPI = 1;
gTokenInterface.debugOnline = TRUE;
gTokenInterface.destinationAddress = 1;
//------------------------------------------------------------------------------
// Create memory pool
//------------------------------------------------------------------------------
memPool = osMemoryPoolNew(8,MAX_BLOCK_SIZE,NULL);
//------------------------------------------------------------------------------
// Create event flag
//------------------------------------------------------------------------------
eventFlag_id = osEventFlagsNew(NULL);
//------------------------------------------------------------------------------
// Create queues
//------------------------------------------------------------------------------
queue_macR_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_macR_attr);
queue_phyS_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_phyS_attr);
queue_macS_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_macS_attr);
queue_dbg_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_dbg_attr);
queue_chatR_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_chatR_attr);
queue_chatS_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_chatS_attr);
queue_timeR_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_timeR_attr);
queue_timeS_id = osMessageQueueNew(2,sizeof(struct queueMsg_t),&queue_timeS_attr);
queue_lcd_id = osMessageQueueNew(4,sizeof(struct queueMsg_t),&queue_lcd_attr);
queue_keyboard_id = osMessageQueueNew(4,sizeof(struct queueMsg_t),&queue_keyboard_attr);
queue_usartR_id = osMessageQueueNew(4,sizeof(struct queueMsg_t),&queue_usartR_attr);
//------------------------------------------------------------------------------
// Create Threads
//------------------------------------------------------------------------------
// audio_id = osThreadNew(AudioPlayer, NULL, &audio_attr);
debug_id = osThreadNew(DebugStation, NULL, &debug_attr);
phy_rec_id = osThreadNew(PhReceiver, NULL, &phy_rec_attr);
phy_snd_id = osThreadNew(PhSender, NULL, &phy_snd_attr);
mac_rec_id = osThreadNew(MacReceiver, NULL, &mac_rec_attr);
mac_snd_id = osThreadNew(MacSender, NULL, &mac_snd_attr);
time_rec_id = osThreadNew(TimeReceiver, NULL, &time_rec_attr);
time_snd_id = osThreadNew(TimeSender, NULL, &time_snd_attr);
chat_rec_id = osThreadNew(ChatReceiver, NULL, &chat_rec_attr);
chat_snd_id = osThreadNew(ChatSender, NULL, &chat_snd_attr);
touch_id = osThreadNew(Touch, NULL, &touch_attr);
lcd_id = osThreadNew(LCD, NULL, &lcd_attr);
//------------------------------------------------------------------------------
// Start kernel and never returns
//------------------------------------------------------------------------------
osKernelStart();
}

119
main.h Normal file
View File

@ -0,0 +1,119 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file main.h
/// \brief Tokenring definitions
/// \author Pascal Sartoretti (pascal dot sartoretti at hevs dot ch)
/// \version 1.0 - original for RTX5
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include "gfx.h"
#include "gui.h"
//--------------------------------------------------------------------------------
// Constants to change the system behavior
//--------------------------------------------------------------------------------
#define DEBUG_MODE 1 // mode is physical line (0) or debug (1)
#define MYADDRESS 3 // your address choice (table number)
#define MAX_BLOCK_SIZE 100 // size max for a frame
//--------------------------------------------------------------------------------
// Constants to NOT change for the system working
//--------------------------------------------------------------------------------
#define CHAT_SAPI 0x01 // sapi chat application number (0-7)
#define TIME_SAPI 0x03 // sapi time application number (0-7)
#define BROADCAST_ADDRESS 0x0F // broadcast address
#define TOKEN_TAG 0xFF // tag of tokenring frame
#define TOKENSIZE 19 // size of a token frame
#define STX 0x02 // any frame start char
#define ETX 0x03 // any frame end char
#define CONTINUE 0x0 // for check return code halt
//--------------------------------------------------------------------------------
// identifiers used in more the one file (thread)
//--------------------------------------------------------------------------------
extern GListener gl;
extern osMemoryPoolId_t memPool;
extern osThreadId_t phy_rec_id;
extern osMessageQueueId_t queue_macR_id;
extern osMessageQueueId_t queue_phyS_id;
extern osMessageQueueId_t queue_dbg_id;
extern osMessageQueueId_t queue_macS_id;
extern osMessageQueueId_t queue_chatR_id;
extern osMessageQueueId_t queue_timeR_id;
extern osMessageQueueId_t queue_lcd_id;
extern osMessageQueueId_t queue_timeS_id;
extern osMessageQueueId_t queue_chatS_id;
extern osMessageQueueId_t queue_keyboard_id;
extern osMessageQueueId_t queue_usartR_id;
extern osEventFlagsId_t eventFlag_id;
//--------------------------------------------------------------------------------
// functions used in more than one file
//--------------------------------------------------------------------------------
void CheckRetCode(uint32_t retCode,uint32_t lineNumber,char * fileName,uint8_t mode);
void DebugFrame(char * stringP);
void DebugMacFrame(uint8_t preChar,uint8_t * stringP);
//--------------------------------------------------------------------------------
// structure for system usage
//--------------------------------------------------------------------------------
struct TOKENINTERFACE
{
uint8_t myAddress; ///< my current address
uint8_t currentView; ///< the current view on LCD
bool_t debugOnline; ///< is debug station ON
bool_t connected; ///< are we connected
bool_t broadcastTime; ///< is broadcast time active
bool_t needReceiveCRCError; ///< debug has to receive error
bool_t needSendCRCError; ///< debug has to send error
uint32_t debugSAPI; ///< current debug SAPI
uint32_t debugAddress; ///< current debug address
bool_t debugMsgToSend; ///< did debug have to send a message
uint32_t destinationAddress; ///< current destination address
uint8_t station_list[15]; ///< 0 to 15
};
extern struct TOKENINTERFACE gTokenInterface;
//--------------------------------------------------------------------------------
// Events usage
//--------------------------------------------------------------------------------
#define RS232_TX_EVENT 0x0001 // ready for next byte to send
#define BROADCAST_TIME_EVT 0x0002 // time to send or not
#define AUDIO_MSG_EVT 0x0020 // audio message to play
#define AUDIO_ERROR_EVT 0x0040 // audio error to play
#define AUDIO_CLOCK_EVT 0x0080 // audio clock to play
//--------------------------------------------------------------------------------
// Types of messages transmitted in the queues
//--------------------------------------------------------------------------------
enum msgType_e
{
TOUCH_EVENT, ///< touch has been pressed
NEW_TOKEN, ///< a new token is requested
START, ///< a start is requested (connected)
STOP, ///< a stop is requested (disconnected)
TOKEN_LIST, ///< token list sent to LCD
MAC_ERROR, ///< error message to LCD
TOKEN, ///< a token message
DATA_IND, ///< a data sent between mac and app layers
DATABACK, ///< a message is coming back
TIME_MSG, ///< a time message is sent to LCD
CHAR_MSG, ///< a single char is sent to the LCD
CHAT_MSG, ///< a chat message is sent to the LCD
FROM_PHY, ///< a message arriving from physical layer
TO_PHY ///< a message sent to physical layer
};
//--------------------------------------------------------------------------------
// The queue message structure
//--------------------------------------------------------------------------------
struct queueMsg_t
{
enum msgType_e type; ///< the type of message
void * anyPtr; ///< the pointer to message (if any)
uint8_t addr; ///< the source or destination address
uint8_t sapi; ///< the source or destination SAPI
};

178
phy_receiver.c Normal file
View File

@ -0,0 +1,178 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file phy_receiver.c
/// \brief Physical receiver thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "ext_uart.h"
#include "ext_led.h"
uint8_t gInBuffer[256]; // generic byte receive buffer
uint8_t recByte;
uint8_t recPtr;
//////////////////////////////////////////////////////////////////////////////////
/// \brief Called on interrupt on RS232 received char
/// \param The uart handler (ext_uart)
//////////////////////////////////////////////////////////////////////////////////
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
struct queueMsg_t queueMsg; // queue message
static uint8_t secondSTX; // STX repeated control
uint32_t size; // size of builded frame
osStatus_t retCode;
//------------------------------------------------------------------------------
// RECEIVED CHAR
//------------------------------------------------------------------------------
if (recByte == STX) // is it an STX char ?
{
//----------------------------------------------------------------------------
if(recPtr == 0) // is it first char ?
{
secondSTX = 0; // this is the first STX
}
//----------------------------------------------------------------------------
else // is not the first char
{
if (secondSTX == 1) // is it the second STX
{
secondSTX = 0; // clear secondSTX flag
HAL_UART_Receive_IT(&ext_uart,&recByte,1); // enable uart receiver 1 char
return; // and quit
}
secondSTX = 1; // set secondSTX to
}
}
//------------------------------------------------------------------------------
else // is not an STX char
{
if(secondSTX == 1) // if was a second STX
{
secondSTX = 0; // clearswap second STX flag
gInBuffer[0] = STX; // set first STX received
recPtr = 1; // set byte counter at 1
HAL_UART_Receive_IT(&ext_uart,&recByte,1); // enable uart receiver 1 char
return; // and quit
}
}
gInBuffer[recPtr] = recByte; // copy data in input buffer
recPtr++; // increment byte counter
//------------------------------------------------------------------------------
if(recPtr > 4) // received more than 4 bytes
{
if(gInBuffer[1]== TOKEN_TAG) // is it a token frame
{
size = TOKENSIZE; // size is token size
}
else // not a token frame
{
size = gInBuffer[3]+6; // get size in frame
}
if (recPtr == size) // check all bytes received
{
if(recByte == ETX) // last char received was ETX ?
{
queueMsg.type = FROM_PHY;
queueMsg.anyPtr = gInBuffer;
//------------------------------------------------------------------------
// QUEUE SEND (send received frame to physical receiver)
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_usartR_id,
&queueMsg,
osPriorityNormal,
0);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
recPtr = 0; // reset bytes counter
}
}
HAL_UART_Receive_IT(&ext_uart,&recByte,1); // enable uart receiver 1 char
}
//////////////////////////////////////////////////////////////////////////////////
// THREAD PHYSICAL RECEIVER
//////////////////////////////////////////////////////////////////////////////////
void PhReceiver(void *argument)
{
struct queueMsg_t queueMsg; // queue message
uint8_t * msg;
uint8_t * qPtr;
size_t size;
osStatus_t retCode;
HAL_UART_Receive_IT(&ext_uart,&recByte,1); // enable uart receiver 1 char
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_usartR_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
qPtr = queueMsg.anyPtr;
//----------------------------------------------------------------------------
// DEBUG DISPLAY FRAME
//----------------------------------------------------------------------------
putchar('R'); // insert a R for Receive
putchar(':'); // insert a :
DebugFrame((char*)qPtr); // display frame on TERMINAL
if (qPtr[1] == TOKEN_TAG) // is it a token frame ?
{
size = TOKENSIZE; // yes -> token frame size
Ext_LED_PWM(1,100); // token is in station
}
else
{
size = qPtr[3]+6; // size of string + 6 (ETX,...)
}
//----------------------------------------------------------------------------
// MEMORY ALLOCATION
//----------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
memcpy(msg,&qPtr[1],size-2);
queueMsg.anyPtr = msg;
queueMsg.type = FROM_PHY;
if((msg[0] == TOKEN_TAG) || // is a token frame
((msg[1]>>3) == gTokenInterface.myAddress) || // is destination my address
((msg[0]>>3) == gTokenInterface.myAddress) || // is source my address
((msg[1]>>3) == BROADCAST_ADDRESS)) // is a broadcast frame
{
//--------------------------------------------------------------------------
// QUEUE SEND (send received frame to mac layer receiver)
//--------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macR_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
else
{
//--------------------------------------------------------------------------
// QUEUE SEND (send received frame to physical layer sender)
//--------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_phyS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
}

162
phy_sender.c Normal file
View File

@ -0,0 +1,162 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file phy_sender.c
/// \brief Physical sender thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "ext_uart.h"
#include "ext_led.h"
//////////////////////////////////////////////////////////////////////////////////
/// \brief Called on interrupt on RS232 sended char
/// \param The uart handler (ext_uart)
//////////////////////////////////////////////////////////////////////////////////
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
osEventFlagsSet(eventFlag_id, RS232_TX_EVENT); // set flag for next send
}
//////////////////////////////////////////////////////////////////////////////////
/// \brief Send bytes to physical line
/// \param byte The byte to send
/// \param counter The number of the byte in the frame
///
/// The STX is sent twice if not the first byte
//////////////////////////////////////////////////////////////////////////////////
void rs232_send(uint8_t byte, uint8_t counter)
{
int32_t eventFlag; // current flag
//------------------------------------------------------------------------------
// EVENT GET wait 10 ticks max
//------------------------------------------------------------------------------
eventFlag = osEventFlagsWait(
eventFlag_id,
RS232_TX_EVENT,
osFlagsWaitAny,
10);
if((eventFlag < 0)&& // case of error
(eventFlag != -2)) // but not a timeout
CheckRetCode(eventFlag,__LINE__,__FILE__,CONTINUE);
//------------------------------------------------------------------------------
if((counter == 0)&&(byte == STX)) // first STX to send
{
HAL_UART_Transmit_IT(&ext_uart,&byte, 1);
}
//------------------------------------------------------------------------------
if ((counter != 0)&&(byte != STX)) // any data to send not STX
{
HAL_UART_Transmit_IT(&ext_uart,&byte, 1);
}
//------------------------------------------------------------------------------
if ((counter != 0)&&(byte == STX)) // STX in frame -> double it
{
HAL_UART_Transmit_IT(&ext_uart,&byte, 1); // send first STX
//----------------------------------------------------------------------------
// EVENT GET wait 10 ticks max
//----------------------------------------------------------------------------
eventFlag = osEventFlagsWait(
eventFlag_id,
RS232_TX_EVENT,
osFlagsWaitAny,
10);
if((eventFlag < 0)&& // case of error
(eventFlag != -2)) // but not a timeout
CheckRetCode(eventFlag | 0x7FFFFFFF,__LINE__,__FILE__,CONTINUE);
HAL_UART_Transmit_IT(&ext_uart,&byte, 1); // send second STX
}
}
//////////////////////////////////////////////////////////////////////////////////
// THREAD PHYSICAL SENDER
//////////////////////////////////////////////////////////////////////////////////
void PhSender(void *argument)
{
struct queueMsg_t queueMsg; // queue message
uint8_t * qPtr;
osStatus_t retCode;
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_phyS_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
qPtr = queueMsg.anyPtr;
if(qPtr[0] == TOKEN_TAG)
{
Ext_LED_PWM(1,0); // token is out of station
}
#if DEBUG_MODE != 0
//----------------------------------------------------------------------------
// DEBUG DISPLAY FRAME
//----------------------------------------------------------------------------
DebugMacFrame('S',qPtr);
//----------------------------------------------------------------------------
// QUEUE SEND (send frame to debug station)
//----------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_dbg_id,
&queueMsg,
osPriorityNormal,
0);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
#else
uint8_t * msg;
uint8_t i;
size_t size;
if(qPtr[0] == TOKEN_TAG)
{
size = TOKENSIZE; // this is a token
}
else
{
size = qPtr[2] + 6; // = txtSize + STX + SRC + DST + LN + CS + ETX
}
//----------------------------------------------------------------------------
// MEMORY ALLOCATION
//----------------------------------------------------------------------------
msg = osMemoryPoolAlloc(memPool,osWaitForever);
msg[0] = STX;
memcpy(&msg[1],qPtr,size-2);
msg[size-1] = ETX;
//----------------------------------------------------------------------------
// DEBUG DISPLAY FRAME
//----------------------------------------------------------------------------
putchar('S'); // insert a S for Send
putchar(':'); // insert a :
DebugFrame((char *)msg); // for debug info only
for(i=0;i<size;i++)
{
rs232_send(msg[i],i);
}
//----------------------------------------------------------------------------
// MEMORY RELEASE (received frame : mac layer style)
//----------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,qPtr);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
//----------------------------------------------------------------------------
// MEMORY RELEASE (created frame : phy layer style)
//----------------------------------------------------------------------------
retCode = osMemoryPoolFree(memPool,msg);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
#endif
}
}

25
rendering_functions.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef _RENDERING_FUNCTIONS_H
#define _RENDERING_FUNCTIONS_H
#include "gfx.h"
#include "resources_manager.h"
// background_Display Background
void background_Display_Background(GWidgetObject* wo, void* param)
{
(void)param;
gdispGFillArea(wo->g.display, wo->g.x, wo->g.y, wo->g.width, wo->g.height, White);
gdispGFillArea(wo->g.display, 0, 0, 480, 272, HTML2COLOR(0xFFFFFF));
}
// background_gray
void background_gray(GWidgetObject* wo, void* param)
{
(void)param;
gdispGFillArea(wo->g.display, wo->g.x, wo->g.y, wo->g.width, wo->g.height, White);
gdispGFillArea(wo->g.display, 0, 0, 480, 272, HTML2COLOR(0x606060));
}
#endif // _RENDERING_FUNCTIONS_H

View File

@ -0,0 +1,273 @@
/* Start of automatically generated font definition for arial12. */
#ifndef MF_RLEFONT_INTERNALS
#define MF_RLEFONT_INTERNALS
#endif
#include "mf_rlefont.h"
#ifndef MF_RLEFONT_VERSION_4_SUPPORTED
#error The font file is not compatible with this version of mcufont.
#endif
static const uint8_t mf_rlefont_arial12_dictionary_data[331] = {
0x1b, 0x03, 0xc7, 0x0b, 0x0c, 0x04, 0x0b, 0x07, 0x0b, 0xc3, 0xcd, 0x0a, 0x09, 0x06, 0x40, 0x02,
0xc3, 0xcc, 0x80, 0xc1, 0x03, 0xc7, 0xcb, 0x01, 0xc2, 0xc6, 0xce, 0x02, 0x28, 0x0b, 0xcd, 0xc4,
0x03, 0x84, 0xc4, 0xcc, 0x02, 0x81, 0x01, 0xc1, 0xc5, 0xc1, 0x80, 0xcd, 0xc8, 0xc1, 0xca, 0xc8,
0x08, 0x01, 0xc3, 0xc2, 0x80, 0x80, 0xcc, 0xc5, 0xc8, 0x18, 0xce, 0xc3, 0xce, 0xc9, 0xc7, 0xca,
0xca, 0xce, 0xcd, 0xc5, 0xcd, 0xc3, 0xc6, 0xcc, 0xc5, 0xcd, 0xcc, 0xc5, 0xcc, 0xc3, 0xcd, 0xc1,
0xc2, 0xcd, 0xce, 0xc2, 0xd9, 0xc7, 0xcc, 0xce, 0xc1, 0xc4, 0xc1, 0xc1, 0x80, 0xca, 0xc1, 0xca,
0xc7, 0xc9, 0xc6, 0xc9, 0xce, 0xc3, 0xcd, 0xc1, 0xc9, 0xcb, 0x06, 0xc1, 0x80, 0xc1, 0x01, 0xc2,
0xce, 0xc4, 0xc9, 0xc9, 0xc5, 0xca, 0xc3, 0xc6, 0x01, 0xde, 0xca, 0xc4, 0xc8, 0xcb, 0xc5, 0xcb,
0xcb, 0xc4, 0xc2, 0xcc, 0xc3, 0x80, 0x83, 0xd8, 0xc7, 0xcd, 0xc4, 0xce, 0xc1, 0xcc, 0xce, 0xc4,
0xda, 0xc6, 0xcd, 0xc1, 0xcd, 0xc4, 0xcd, 0xcb, 0xc2, 0xc3, 0xce, 0xcc, 0xc4, 0xc8, 0xcc, 0x05,
0x80, 0xc3, 0xc1, 0xcb, 0x01, 0xcb, 0xc3, 0xca, 0xc2, 0x01, 0xc5, 0xcc, 0xc7, 0xce, 0xc7, 0xc9,
0xcd, 0xc4, 0xc8, 0xc9, 0x01, 0xcc, 0x5f, 0x29, 0x42, 0x19, 0x4f, 0x29, 0x0f, 0x02, 0x1d, 0x1c,
0x2f, 0x25, 0x0b, 0x01, 0x0d, 0x07, 0x04, 0x0a, 0x45, 0x22, 0x4f, 0x29, 0x51, 0x6c, 0x5d, 0x06,
0x0e, 0x05, 0x5d, 0x07, 0x01, 0x59, 0x4f, 0x1e, 0x4f, 0x29, 0x4f, 0x1e, 0x1d, 0x35, 0x1f, 0x1f,
0x1f, 0x48, 0x1d, 0x29, 0x24, 0x1e, 0x3b, 0x29, 0x2d, 0x1c, 0x27, 0x63, 0x6e, 0x0c, 0x33, 0x1b,
0x0d, 0x1b, 0x0d, 0x1b, 0x0d, 0x1b, 0x0d, 0x1b, 0x0f, 0x1e, 0xa4, 0x00, 0x63, 0x20, 0x23, 0x63,
0x22, 0x25, 0x26, 0x00, 0xa4, 0x6c, 0x51, 0x22, 0x34, 0x39, 0x1d, 0x08, 0x03, 0x1d, 0x0a, 0x01,
0x22, 0x21, 0x51, 0x21, 0x51, 0x6c, 0x29, 0x4a, 0x2d, 0x21, 0x2d, 0x21, 0x2d, 0x21, 0x2d, 0x21,
0x0d, 0x71, 0x1d, 0x5f, 0x1d, 0x0e, 0x68, 0x00, 0x4f, 0x06, 0x0a, 0x29, 0x09, 0x1a, 0x09, 0x1a,
0x04, 0x20, 0x2d, 0x6c, 0x2d, 0x2d, 0x6c, 0x07, 0x08, 0x01, 0x20, 0x04, 0x0c, 0x1e, 0x74, 0x29,
0x52, 0x49, 0x75, 0x2b, 0x33, 0x75, 0x2b, 0x33, 0x75, 0x2b, 0x6c,
};
static const uint16_t mf_rlefont_arial12_dictionary_offsets[136] = {
0x0000, 0x0001, 0x0002, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
0x000b, 0x000c, 0x000d, 0x000e, 0x0010, 0x0012, 0x0015, 0x0017,
0x0019, 0x001b, 0x001c, 0x001d, 0x0021, 0x0022, 0x0025, 0x0026,
0x0028, 0x002a, 0x002d, 0x0030, 0x0031, 0x0033, 0x0035, 0x0037,
0x0039, 0x003a, 0x003c, 0x003e, 0x0040, 0x0042, 0x0044, 0x0046,
0x0048, 0x004a, 0x004c, 0x004e, 0x0050, 0x0052, 0x0054, 0x0055,
0x0057, 0x0059, 0x005b, 0x005d, 0x005f, 0x0061, 0x0063, 0x0065,
0x0067, 0x006b, 0x006f, 0x0071, 0x0073, 0x0075, 0x0077, 0x0079,
0x007a, 0x007c, 0x007e, 0x0080, 0x0082, 0x0084, 0x0086, 0x0087,
0x0088, 0x008a, 0x008c, 0x008e, 0x0090, 0x0091, 0x0093, 0x0095,
0x0097, 0x0099, 0x009b, 0x009d, 0x009f, 0x00a0, 0x00a2, 0x00a4,
0x00a6, 0x00a8, 0x00aa, 0x00ac, 0x00ae, 0x00b0, 0x00b2, 0x00b4,
0x00b6, 0x00bc, 0x00bf, 0x00c2, 0x00c4, 0x00c6, 0x00c8, 0x00d0,
0x00d2, 0x00d6, 0x00dc, 0x00de, 0x00e1, 0x00e3, 0x00ef, 0x00f8,
0x00fb, 0x0100, 0x0105, 0x0107, 0x010a, 0x010f, 0x0111, 0x0116,
0x0118, 0x0120, 0x0122, 0x0125, 0x0127, 0x0129, 0x012c, 0x0130,
0x0132, 0x0137, 0x0139, 0x013b, 0x013d, 0x0140, 0x0142, 0x014b,
};
static const uint8_t mf_rlefont_arial12_glyph_data_0[2493] = {
0x03, 0x00, 0x10, 0x03, 0xf8, 0x05, 0x22, 0xa4, 0x05, 0x1d, 0x7f, 0x2b, 0x33, 0x42, 0x1d, 0x68,
0x1d, 0x4b, 0x38, 0x63, 0x10, 0x04, 0x00, 0x26, 0x59, 0x21, 0x06, 0x0b, 0x3b, 0x21, 0x53, 0x37,
0x10, 0x07, 0x29, 0x6f, 0x03, 0x00, 0x0d, 0x21, 0x0d, 0x27, 0x0b, 0x1e, 0x0d, 0x2c, 0x08, 0x1e,
0x53, 0x00, 0x54, 0x33, 0x07, 0x56, 0x68, 0x1e, 0x0d, 0x2c, 0x08, 0x1e, 0x0d, 0x34, 0x0b, 0x33,
0x62, 0x00, 0x06, 0x08, 0x33, 0x53, 0x00, 0x54, 0x10, 0x07, 0x29, 0x65, 0x0f, 0x68, 0x8b, 0x0a,
0x59, 0x1e, 0x5a, 0x00, 0x09, 0x21, 0x44, 0x3b, 0x21, 0x27, 0x08, 0x0f, 0x0d, 0x97, 0x54, 0x0e,
0x1e, 0x76, 0x00, 0x09, 0xfe, 0x8d, 0x03, 0x39, 0x09, 0x47, 0x33, 0x65, 0x36, 0x02, 0x20, 0x09,
0x10, 0x0b, 0x29, 0x08, 0x3a, 0x29, 0x62, 0x6c, 0x5c, 0x01, 0x42, 0x00, 0x08, 0x05, 0x6c, 0x7d,
0x00, 0x54, 0x02, 0x0b, 0x22, 0x5c, 0x01, 0x42, 0x09, 0x04, 0x1e, 0x08, 0x3a, 0x02, 0x0b, 0x44,
0x75, 0x1e, 0x55, 0x4d, 0x9b, 0x22, 0x70, 0x6f, 0x03, 0x00, 0x0e, 0x22, 0x55, 0x00, 0x4d, 0x9b,
0x6c, 0x70, 0x29, 0x44, 0x75, 0x10, 0x08, 0x19, 0x4e, 0x0c, 0x02, 0x33, 0x04, 0x43, 0x46, 0x33,
0x72, 0x00, 0x74, 0x33, 0x77, 0x6b, 0x02, 0x33, 0x67, 0x0e, 0x56, 0x8b, 0x04, 0x63, 0x43, 0x6c,
0x26, 0x29, 0x07, 0x0f, 0x0a, 0x22, 0x69, 0x49, 0x07, 0x36, 0x8d, 0x65, 0x0f, 0x68, 0x4d, 0x10,
0x02, 0x00, 0x26, 0x1d, 0x26, 0x1d, 0x04, 0x08, 0x10, 0x04, 0x19, 0x08, 0x97, 0x02, 0x0b, 0x1d,
0x54, 0x1d, 0x0e, 0x9a, 0x69, 0x1d, 0x67, 0x1f, 0x1b, 0x84, 0x0a, 0x05, 0x20, 0x34, 0x0b, 0x1b,
0x08, 0x04, 0x10, 0x04, 0x00, 0x6e, 0x1b, 0x07, 0x1a, 0x66, 0x1b, 0x5b, 0x1d, 0x4c, 0x92, 0x09,
0x1a, 0x0c, 0x97, 0x66, 0x1d, 0x07, 0x07, 0x20, 0x6e, 0x10, 0x05, 0x29, 0x6e, 0x20, 0x74, 0x0c,
0x68, 0x1e, 0x2f, 0x4e, 0x97, 0x58, 0x08, 0x10, 0x07, 0x19, 0x18, 0x87, 0x21, 0x05, 0x2c, 0x05,
0x21, 0x87, 0x10, 0x03, 0x2a, 0x23, 0x63, 0x8c, 0x10, 0x04, 0x23, 0x09, 0x2e, 0x09, 0x10, 0x03,
0x2a, 0x23, 0x63, 0x10, 0x03, 0x19, 0x55, 0x20, 0x77, 0x1d, 0x70, 0x1d, 0x07, 0x05, 0x20, 0x6f,
0x9a, 0x62, 0x1d, 0x37, 0x1d, 0x09, 0x97, 0x77, 0x10, 0x07, 0x29, 0x67, 0x0e, 0x0a, 0x1e, 0x2f,
0x7f, 0x32, 0x1e, 0x2d, 0x4f, 0x9c, 0xfe, 0x8d, 0x74, 0xec, 0x8d, 0x74, 0xec, 0x8d, 0x5a, 0x00,
0x94, 0x22, 0x2f, 0x7f, 0x32, 0x33, 0x9b, 0x0e, 0x4b, 0x10, 0x07, 0x1c, 0x08, 0x07, 0x20, 0x08,
0x0f, 0x07, 0x21, 0x64, 0x4c, 0x33, 0x2f, 0x00, 0x96, 0x96, 0x96, 0x10, 0x07, 0x29, 0x60, 0x93,
0x1e, 0x67, 0x02, 0x01, 0x6b, 0x21, 0x8f, 0x1d, 0x72, 0x21, 0x27, 0x75, 0x33, 0x27, 0x3d, 0x33,
0x27, 0x75, 0x21, 0x66, 0x97, 0x08, 0x2c, 0x01, 0x10, 0x07, 0x29, 0x65, 0x3a, 0x1e, 0x34, 0x3e,
0x6e, 0x1a, 0x95, 0x33, 0x5c, 0x06, 0x21, 0x05, 0x0e, 0x91, 0x20, 0x65, 0x21, 0x8f, 0x8d, 0x05,
0x3e, 0x01, 0x6b, 0x33, 0x73, 0x93, 0x10, 0x07, 0x1c, 0x61, 0x20, 0x66, 0x0e, 0x20, 0x08, 0x4e,
0x21, 0x24, 0x52, 0x21, 0x42, 0x52, 0x33, 0x5f, 0x00, 0x52, 0x33, 0x0d, 0x2c, 0x01, 0x21, 0x52,
0x1d, 0x52, 0x10, 0x07, 0x29, 0x09, 0x2e, 0x36, 0x33, 0x5b, 0x1d, 0x48, 0x33, 0x8f, 0x0b, 0x93,
0x8b, 0x01, 0x6b, 0x1e, 0xa4, 0x02, 0x33, 0x8f, 0x8d, 0x05, 0x3e, 0x50, 0x29, 0x60, 0x0f, 0x7b,
0x10, 0x07, 0x29, 0x24, 0x0f, 0x42, 0x33, 0x0d, 0x06, 0x01, 0x47, 0x1e, 0x04, 0x0b, 0x1d, 0x3b,
0x0b, 0x93, 0x1e, 0x08, 0x0f, 0x30, 0x6b, 0x1e, 0x59, 0x8f, 0x8d, 0x72, 0x8f, 0x8d, 0x01, 0x0e,
0x06, 0x01, 0x59, 0x33, 0x24, 0x93, 0x10, 0x07, 0x00, 0x07, 0x2c, 0x02, 0x20, 0x46, 0x20, 0x61,
0x9a, 0x0c, 0x06, 0x20, 0x69, 0x1d, 0x46, 0x2b, 0x6c, 0x8f, 0x9a, 0x69, 0x10, 0x07, 0x29, 0x67,
0x0e, 0x4b, 0x33, 0x7f, 0x32, 0x1e, 0x52, 0x29, 0x5a, 0x33, 0x3d, 0x32, 0x33, 0x06, 0x2e, 0x91,
0x22, 0x04, 0x39, 0x01, 0x47, 0x1e, 0x3b, 0xec, 0x8d, 0x61, 0x49, 0x60, 0x33, 0x65, 0x0e, 0x0b,
0x03, 0x10, 0x07, 0x29, 0x40, 0x3a, 0x01, 0x1e, 0x52, 0x30, 0x0a, 0x09, 0x1e, 0x95, 0x52, 0x1e,
0x95, 0x35, 0x8d, 0x69, 0x49, 0x09, 0x0f, 0x02, 0x1e, 0x65, 0x0e, 0x28, 0x9a, 0x44, 0x22, 0x94,
0x02, 0x6e, 0x07, 0x33, 0x73, 0x3a, 0x10, 0x03, 0x18, 0x88, 0x10, 0x03, 0x18, 0x88, 0x8c, 0x10,
0x07, 0x29, 0x18, 0x2f, 0x5a, 0x05, 0x1e, 0x7d, 0x0d, 0x09, 0x04, 0x1e, 0x05, 0x0f, 0x08, 0x9a,
0x7d, 0x0d, 0x09, 0x97, 0x01, 0x5a, 0x05, 0x10, 0x07, 0x2a, 0x05, 0x2c, 0x05, 0x6c, 0x18, 0x05,
0x2c, 0x05, 0x10, 0x07, 0x18, 0x5a, 0x05, 0x9a, 0x53, 0x0d, 0x58, 0x21, 0x2f, 0x08, 0x0f, 0x05,
0x1e, 0x53, 0x0d, 0x58, 0x1e, 0x5a, 0x30, 0x10, 0x07, 0x29, 0x67, 0x93, 0x22, 0x2f, 0x0e, 0x30,
0x09, 0x0c, 0x1e, 0x5a, 0x8f, 0x9a, 0x40, 0x20, 0x04, 0x63, 0x33, 0x2f, 0x0e, 0x97, 0x24, 0x38,
0x61, 0x10, 0x0c, 0x1c, 0x70, 0x0d, 0x0f, 0x0d, 0x09, 0x02, 0x6c, 0x65, 0x06, 0x02, 0x27, 0x08,
0x39, 0x29, 0x34, 0x43, 0x6c, 0x67, 0x19, 0x5b, 0x00, 0x73, 0x0d, 0x47, 0x00, 0x58, 0x00, 0x62,
0x00, 0x47, 0x02, 0x02, 0x3a, 0x00, 0x07, 0x07, 0x00, 0x53, 0x00, 0x39, 0x29, 0x0a, 0x56, 0x08,
0x56, 0x37, 0x01, 0xe5, 0x91, 0x43, 0x00, 0x70, 0x00, 0x0e, 0x30, 0x0a, 0x0f, 0x01, 0x4c, 0x19,
0x48, 0x67, 0x0d, 0x65, 0x0e, 0x07, 0x1c, 0x08, 0x0a, 0x22, 0x6f, 0x07, 0x19, 0x0a, 0x41, 0x02,
0x2f, 0x72, 0x09, 0x6c, 0x5a, 0x0e, 0x0f, 0x0e, 0x0b, 0x05, 0x10, 0x08, 0x1c, 0x0d, 0x0a, 0x20,
0x9b, 0x48, 0x21, 0x0a, 0x08, 0x4c, 0x1e, 0x2f, 0x45, 0x40, 0x33, 0x95, 0x75, 0x22, 0x6f, 0x5e,
0x0a, 0x22, 0x52, 0x29, 0x27, 0x48, 0x6c, 0x3b, 0x19, 0x77, 0x06, 0x6c, 0x3d, 0x1c, 0x47, 0x10,
0x08, 0x27, 0x5e, 0x42, 0x6c, 0x27, 0xfd, 0x2f, 0x09, 0x0c, 0x6c, 0x27, 0xe5, 0x67, 0x6c, 0x27,
0xfd, 0x2f, 0x4d, 0x6c, 0x27, 0x2c, 0x08, 0x6c, 0x27, 0xe5, 0x05, 0x6d, 0x1c, 0x27, 0xc5, 0x3d,
0x1c, 0x27, 0xe5, 0x05, 0x48, 0x1c, 0x27, 0xfb, 0x0e, 0x6a, 0x10, 0x09, 0x19, 0x3f, 0x0e, 0x7c,
0x1e, 0x60, 0x49, 0x24, 0x08, 0x1c, 0x2f, 0x6d, 0x19, 0x70, 0x6c, 0x40, 0x1d, 0x3f, 0x1d, 0x67,
0x1c, 0x2f, 0x1c, 0x2f, 0x6d, 0x29, 0x34, 0x48, 0x6c, 0x08, 0x3e, 0x01, 0x4f, 0x08, 0x1e, 0x60,
0x0f, 0x7c, 0x10, 0x09, 0x2f, 0x5e, 0x41, 0x00, 0x8a, 0x01, 0x05, 0x63, 0x7a, 0x59, 0x7a, 0x69,
0x7a, 0x35, 0x7a, 0x67, 0x7a, 0x59, 0x8a, 0x01, 0x05, 0x63, 0x1c, 0x2f, 0xfb, 0x0e, 0x6a, 0x10,
0x08, 0x2f, 0xc3, 0x02, 0x8a, 0x8e, 0x19, 0x2f, 0x2c, 0x0d, 0x00, 0x8a, 0x8e, 0x19, 0x2f, 0xc3,
0x05, 0x10, 0x07, 0xc0, 0x36, 0x1e, 0x79, 0x79, 0x79, 0x2c, 0x02, 0x1e, 0x79, 0x79, 0x79, 0x79,
0x10, 0x09, 0x19, 0x72, 0x57, 0x0b, 0x03, 0x22, 0x28, 0x30, 0x01, 0x07, 0x45, 0x6c, 0x63, 0x1c,
0x07, 0x03, 0x1c, 0x61, 0x1d, 0x40, 0x8f, 0x2e, 0x09, 0x1c, 0x61, 0x6c, 0x76, 0x6c, 0x63, 0x1c,
0x76, 0x6c, 0x28, 0x30, 0x01, 0x28, 0x06, 0x22, 0x04, 0x0b, 0x57, 0x5b, 0x10, 0x09, 0x29, 0x25,
0x26, 0x89, 0x01, 0x19, 0x26, 0x89, 0x2c, 0x0b, 0x89, 0x01, 0x19, 0x26, 0x89, 0x01, 0x19, 0x26,
0x10, 0x03, 0x29, 0x9e, 0x19, 0x75, 0x2b, 0x33, 0x75, 0x10, 0x06, 0x1c, 0x51, 0x8e, 0x1c, 0x51,
0x8e, 0x00, 0x08, 0x56, 0x4a, 0x33, 0x07, 0x7b, 0x60, 0x1e, 0x2f, 0x3c, 0x75, 0x10, 0x08, 0x27,
0xe5, 0x04, 0x7f, 0x1c, 0x27, 0xf5, 0x69, 0x06, 0x6c, 0x27, 0xfd, 0x69, 0x07, 0x1e, 0x35, 0x69,
0x08, 0x33, 0x35, 0x0e, 0x0d, 0x0b, 0x33, 0x35, 0x08, 0x01, 0x7c, 0x22, 0x27, 0xf5, 0x04, 0x6d,
0x6c, 0x27, 0xe5, 0x08, 0x43, 0x1c, 0x27, 0xc5, 0x0d, 0x09, 0x10, 0x07, 0x00, 0x35, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x5e, 0x04, 0x10, 0x0a, 0x27, 0x36, 0x1c, 0x09, 0x25, 0x35,
0x91, 0x00, 0x77, 0x25, 0x35, 0x08, 0x07, 0x29, 0x37, 0x25, 0x35, 0x2d, 0x55, 0x25, 0x02, 0xfd,
0x45, 0x66, 0x00, 0x25, 0x02, 0xfd, 0x09, 0x07, 0x05, 0x09, 0x00, 0x25, 0x02, 0xfd, 0x72, 0x58,
0x00, 0x25, 0x35, 0x2f, 0x57, 0x29, 0x25, 0x02, 0xf5, 0x64, 0xf8, 0x01, 0x10, 0x09, 0x00, 0x4a,
0x06, 0x19, 0x95, 0x29, 0x2f, 0x36, 0x01, 0x29, 0x95, 0x00, 0x8f, 0x06, 0x09, 0x29, 0x95, 0x00,
0x8f, 0x6f, 0x03, 0x00, 0x95, 0x00, 0x8f, 0x34, 0x0b, 0x00, 0x95, 0x29, 0x2f, 0xf5, 0x54, 0x95,
0x29, 0x2f, 0xf5, 0x62, 0x3b, 0x1c, 0x2f, 0xe5, 0x28, 0x0a, 0x1c, 0x2f, 0xe5, 0x77, 0x0a, 0x10,
0x09, 0x19, 0x3f, 0x31, 0x8d, 0x60, 0x30, 0x02, 0x0a, 0x0c, 0x1c, 0x2f, 0x39, 0x1c, 0x0d, 0x06,
0x1c, 0x40, 0x6c, 0x3b, 0x1c, 0x3f, 0x6c, 0x3f, 0x1c, 0x40, 0x6c, 0x08, 0x0a, 0x19, 0x2f, 0x39,
0x1c, 0x0d, 0x06, 0x6c, 0x60, 0x49, 0x02, 0x0a, 0x0c, 0x1e, 0x72, 0x31, 0x01, 0x10, 0x08, 0x2f,
0x5e, 0x7c, 0x00, 0x8a, 0x34, 0x63, 0x7a, 0x0b, 0x07, 0x8a, 0x00, 0x04, 0x39, 0x1c, 0x2f, 0x5e,
0x7c, 0x00, 0x8a, 0x8e, 0x1c, 0x51, 0x10, 0x09, 0x19, 0x3f, 0x31, 0x8d, 0x08, 0x0d, 0x49, 0x02,
0x0b, 0x0b, 0x1c, 0x2f, 0x6d, 0x1c, 0x3d, 0x1c, 0x3f, 0x6c, 0x76, 0x1c, 0x26, 0x6c, 0x26, 0x1c,
0x3f, 0x6c, 0x46, 0x19, 0x2f, 0x6d, 0x27, 0x07, 0x01, 0x3d, 0x6c, 0x07, 0x75, 0x5c, 0x0e, 0x0c,
0x1e, 0x3f, 0x0f, 0x0d, 0x3f, 0x08, 0x20, 0x2f, 0x04, 0x10, 0x09, 0x2f, 0x5e, 0x0e, 0x7b, 0x8a,
0x27, 0x0b, 0x09, 0x7a, 0x3f, 0x8a, 0x00, 0x5c, 0x09, 0x1c, 0x2f, 0x5e, 0x3a, 0x01, 0x8a, 0x05,
0x91, 0x8a, 0x00, 0x07, 0x43, 0x7a, 0x0c, 0x09, 0x7a, 0x04, 0x6d, 0x10, 0x08, 0x00, 0x34, 0x0b,
0x57, 0x4b, 0x1e, 0x7c, 0x01, 0x01, 0x0a, 0x0b, 0x00, 0x8a, 0x00, 0x51, 0x1c, 0x77, 0x0c, 0x06,
0x02, 0x33, 0x2f, 0x47, 0x0f, 0x3d, 0x21, 0x2f, 0x06, 0x6d, 0x6c, 0x3f, 0x1c, 0x41, 0x1c, 0x2f,
0x0e, 0x07, 0x02, 0x01, 0x05, 0x45, 0x6c, 0x34, 0x0b, 0x0e, 0x0f, 0x42, 0x10, 0x07, 0x6f, 0xc3,
0x01, 0x33, 0x9e, 0x19, 0x75, 0x2b, 0x10, 0x09, 0x2f, 0x25, 0x26, 0x7a, 0x26, 0x7a, 0x26, 0x7a,
0x26, 0x7a, 0x26, 0x7a, 0x3b, 0x22, 0x39, 0x19, 0x46, 0x22, 0x09, 0x68, 0x01, 0x04, 0x63, 0x6c,
0x2f, 0x4e, 0x0f, 0x41, 0x10, 0x08, 0x77, 0x07, 0x1c, 0x26, 0x6c, 0x3f, 0x1c, 0x41, 0x1c, 0x2f,
0x6d, 0x29, 0x69, 0x1e, 0x0a, 0x08, 0x29, 0x46, 0x1e, 0x61, 0x29, 0x39, 0x33, 0x63, 0x40, 0x21,
0x08, 0x0a, 0x4c, 0x21, 0x69, 0x45, 0x21, 0x77, 0x0b, 0x10, 0x0b, 0x6f, 0x06, 0x29, 0x35, 0x08,
0x29, 0x51, 0x3b, 0x29, 0x65, 0x0b, 0x29, 0x2d, 0x4f, 0x29, 0x4c, 0x48, 0x00, 0x5f, 0x19, 0x48,
0x00, 0x45, 0x6a, 0x00, 0x5b, 0x19, 0x5b, 0x4f, 0x00, 0x5f, 0x00, 0x48, 0x19, 0x99, 0x99, 0x34,
0x42, 0x0b, 0x1c, 0x24, 0x6a, 0x29, 0x0e, 0x4c, 0x6c, 0x0e, 0x0f, 0x01, 0x29, 0x0a, 0x6d, 0x1c,
0x6f, 0x0b, 0x19, 0x28, 0x10, 0x08, 0x34, 0x45, 0x19, 0x3d, 0x22, 0x59, 0x29, 0x08, 0x0a, 0x33,
0x41, 0x03, 0x43, 0x33, 0x69, 0x63, 0x21, 0x77, 0x0d, 0x20, 0x47, 0x0d, 0x08, 0x00, 0x8b, 0x03,
0x6d, 0x6c, 0x2f, 0x7c, 0x29, 0x08, 0x43, 0x6c, 0x09, 0x0b, 0x19, 0x77, 0x09, 0x10, 0x08, 0x00,
0x0a, 0x0b, 0x19, 0x6f, 0x09, 0x1c, 0x2f, 0x63, 0x29, 0x67, 0x8d, 0x65, 0x29, 0x75, 0x1e, 0x6f,
0x08, 0x46, 0x21, 0x52, 0x0d, 0x9a, 0x0a, 0x1a, 0x0a, 0x1a, 0x0a, 0x1a, 0x4c, 0x10, 0x07, 0x00,
0x04, 0x2c, 0x0d, 0x20, 0x77, 0x08, 0x20, 0x26, 0x20, 0x04, 0x43, 0x21, 0x52, 0x97, 0x0c, 0x07,
0x20, 0x09, 0x0b, 0x20, 0x65, 0x9a, 0x0c, 0xc3, 0x10, 0x03, 0x34, 0x2e, 0x02, 0x33, 0x94, 0x1f,
0x1f, 0x83, 0x83, 0x1d, 0x5d, 0x79, 0x10, 0x03, 0x77, 0x1b, 0x09, 0x04, 0x1d, 0x37, 0x1d, 0x62,
0x1b, 0x7b, 0x1d, 0x07, 0x05, 0x1d, 0x70, 0x1d, 0x77, 0x1b, 0x55, 0x10, 0x03, 0x77, 0x0f, 0x08,
0x1d, 0x5f, 0x92, 0x5f, 0x92, 0x5f, 0x92, 0x5f, 0x92, 0x5f, 0x21, 0x77, 0x0f, 0x08, 0x10, 0x06,
0x29, 0x77, 0x07, 0x20, 0x7d, 0x0c, 0x20, 0x58, 0x58, 0x33, 0x66, 0x00, 0x7d, 0x00, 0x9c, 0x45,
0x10, 0x07, 0x38, 0x2a, 0x23, 0x03, 0x2c, 0x36, 0x10, 0x04, 0x34, 0x79, 0x99, 0x10, 0x07, 0x00,
0x18, 0x60, 0x0f, 0x75, 0x22, 0x94, 0x02, 0x50, 0x6c, 0x9b, 0x33, 0x53, 0x0b, 0x0e, 0x0c, 0x1e,
0x40, 0x06, 0x04, 0x72, 0x1e, 0x08, 0x7b, 0x5c, 0x0d, 0x1e, 0x5c, 0x0e, 0x41, 0x25, 0x10, 0x07,
0x94, 0x1f, 0x1f, 0x09, 0x93, 0x1e, 0x80, 0x22, 0x94, 0x8f, 0x8d, 0x24, 0x19, 0x7e, 0x01, 0x09,
0x0a, 0x1e, 0x24, 0x3c, 0x7b, 0x10, 0x06, 0x00, 0x18, 0x40, 0x0e, 0x7b, 0x1e, 0x9d, 0x46, 0x1e,
0x95, 0x21, 0x76, 0x1d, 0x95, 0x21, 0x9d, 0x26, 0x33, 0x40, 0x93, 0x10, 0x07, 0x6c, 0x9b, 0x1d,
0x9b, 0x33, 0x06, 0x57, 0x6b, 0x8b, 0x5c, 0x0c, 0x9c, 0x72, 0x1e, 0x09, 0x08, 0x85, 0x40, 0x0e,
0x6b, 0x10, 0x07, 0x00, 0x18, 0x9b, 0x0e, 0x4b, 0x1e, 0x52, 0x30, 0x09, 0x0a, 0x1e, 0x95, 0x4a,
0x1e, 0x08, 0x2c, 0x02, 0x22, 0x3b, 0x1d, 0x9d, 0x65, 0x33, 0x9b, 0x0e, 0x42, 0x10, 0x03, 0x29,
0x08, 0x0f, 0x09, 0x20, 0x39, 0x20, 0x0d, 0x2e, 0x05, 0x20, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48,
0x10, 0x07, 0x00, 0x18, 0x65, 0x0d, 0x60, 0x22, 0x34, 0x63, 0x62, 0x0d, 0x9c, 0x67, 0x1e, 0x09,
0x07, 0x29, 0x44, 0x9c, 0x67, 0x22, 0x27, 0x39, 0x6e, 0x0d, 0x33, 0x28, 0x0d, 0x6b, 0x21, 0x2f,
0x46, 0x1e, 0x5c, 0x0f, 0x0e, 0x4b, 0x10, 0x07, 0x94, 0x1f, 0x1f, 0x4e, 0x3e, 0x1e, 0x80, 0x1e,
0x69, 0x29, 0x81, 0x4f, 0x29, 0x81, 0x4f, 0x00, 0x94, 0x10, 0x03, 0x94, 0x38, 0x4f, 0x83, 0x83,
0x10, 0x03, 0x94, 0x38, 0x4f, 0x83, 0x83, 0x1d, 0x72, 0x20, 0x28, 0x06, 0x10, 0x06, 0x94, 0x1f,
0x1f, 0x34, 0x63, 0x22, 0x94, 0x02, 0x3d, 0x33, 0x69, 0x0d, 0x08, 0x21, 0x5d, 0x0b, 0x0d, 0x33,
0x94, 0x77, 0x07, 0x1e, 0x94, 0x34, 0x45, 0x22, 0x94, 0x29, 0x64, 0x10, 0x03, 0x00, 0x90, 0x90,
0x9b, 0x10, 0x0a, 0x18, 0x03, 0x0b, 0x4e, 0x0b, 0x24, 0x0e, 0x08, 0x1c, 0x5d, 0x06, 0x62, 0x3e,
0x5d, 0x02, 0x19, 0x69, 0x29, 0x76, 0x29, 0x3e, 0x29, 0x94, 0x29, 0x78, 0x78, 0x78, 0x5f, 0x29,
0x42, 0x10, 0x07, 0x18, 0x24, 0x3c, 0x42, 0x1e, 0x5d, 0x06, 0x50, 0x00, 0x69, 0x29, 0x81, 0x4f,
0x29, 0x81, 0x4f, 0x00, 0x94, 0x10, 0x07, 0x00, 0x18, 0x40, 0x93, 0x1e, 0x9d, 0x09, 0x0b, 0x1e,
0x3b, 0x8f, 0x02, 0x22, 0x5f, 0x19, 0x3e, 0x22, 0x3b, 0x8f, 0x02, 0x22, 0x9d, 0x09, 0x0c, 0x33,
0x40, 0x93, 0x10, 0x07, 0x18, 0x24, 0x0a, 0x36, 0x02, 0x1e, 0x80, 0x1e, 0x69, 0x8f, 0x8d, 0x24,
0x19, 0x7e, 0x50, 0x94, 0x3c, 0x0b, 0x8d, 0x94, 0x1f, 0x10, 0x07, 0x00, 0x18, 0x65, 0x0e, 0x47,
0x8b, 0x5c, 0x0c, 0x9c, 0x72, 0x1e, 0x5f, 0x85, 0x67, 0x3a, 0x0c, 0x1d, 0x9b, 0x1d, 0x9b, 0x10,
0x04, 0x18, 0x24, 0x0c, 0x43, 0x33, 0x5d, 0x49, 0x21, 0x69, 0x1f, 0x1d, 0x24, 0x1d, 0x24, 0x1d,
0x24, 0x10, 0x06, 0x00, 0x18, 0x4e, 0x7c, 0x33, 0x05, 0x7b, 0x02, 0x39, 0x1e, 0x05, 0x0e, 0x06,
0x02, 0x20, 0x60, 0x0f, 0x0b, 0x9a, 0x24, 0x07, 0x1e, 0x07, 0x4b, 0x62, 0x06, 0x33, 0x3c, 0x3a,
0x10, 0x03, 0x29, 0x0d, 0x1e, 0xa4, 0x20, 0x77, 0x2e, 0x9a, 0x87, 0x1b, 0x87, 0x1b, 0x79, 0x0a,
0x79, 0x10, 0x07, 0x18, 0x2d, 0x98, 0x2d, 0x98, 0x4f, 0x29, 0x72, 0x6c, 0x8f, 0x04, 0x62, 0x0c,
0x33, 0x73, 0x0d, 0x3f, 0x10, 0x06, 0x18, 0x0a, 0x06, 0x29, 0x95, 0x6c, 0x5a, 0x00, 0x6f, 0x05,
0x22, 0x2f, 0x48, 0x01, 0x48, 0x33, 0x0a, 0x06, 0x05, 0x0a, 0x21, 0x05, 0x64, 0x05, 0x33, 0x2f,
0x57, 0x9a, 0x64, 0x10, 0x09, 0x18, 0x75, 0x00, 0x05, 0x0e, 0x29, 0x09, 0x07, 0x1c, 0x08, 0x07,
0x00, 0x08, 0x6d, 0x77, 0x02, 0x1c, 0x7d, 0x6f, 0x0a, 0x06, 0x66, 0x6c, 0x66, 0x77, 0x06, 0x54,
0x09, 0x6c, 0x6f, 0x06, 0x09, 0x44, 0x54, 0x22, 0x73, 0x56, 0x0d, 0x0e, 0x8d, 0x5d, 0x71, 0x09,
0x0b, 0x10, 0x06, 0x18, 0x3f, 0x00, 0x77, 0x07, 0x33, 0x6a, 0x9b, 0x33, 0x94, 0x3e, 0x21, 0x77,
0x0c, 0x20, 0x40, 0x7f, 0x1e, 0x2f, 0x7f, 0x05, 0x48, 0x1e, 0x09, 0x0a, 0x00, 0x6f, 0x09, 0x10,
0x06, 0x18, 0x09, 0x07, 0x29, 0x5a, 0x1e, 0x2d, 0x4d, 0x33, 0x91, 0x43, 0x33, 0x08, 0x07, 0x03,
0x0b, 0x21, 0x5c, 0x08, 0x06, 0x21, 0x77, 0x0e, 0x9a, 0x59, 0x21, 0x2f, 0x3d, 0x21, 0x04, 0x3a,
0x10, 0x06, 0x18, 0x08, 0x5e, 0x08, 0x21, 0x34, 0x45, 0x33, 0x2f, 0x3d, 0x21, 0x6f, 0x08, 0x20,
0x6b, 0x20, 0x40, 0x02, 0x21, 0x6f, 0x5e, 0x0b, 0x10, 0x04, 0x29, 0x62, 0x0b, 0x20, 0x95, 0x21,
0x99, 0x1d, 0x99, 0x20, 0x62, 0x97, 0x0a, 0x0b, 0x20, 0x2f, 0x6a, 0x1d, 0x07, 0x1a, 0x99, 0x1d,
0x95, 0x21, 0x62, 0x0b, 0x10, 0x03, 0x29, 0x0d, 0x86, 0x0d, 0x86, 0x0d, 0x10, 0x04, 0x6f, 0x0c,
0x01, 0x1d, 0x0a, 0x06, 0x1d, 0x08, 0x1a, 0x07, 0x1a, 0x9b, 0x01, 0x1d, 0x64, 0x20, 0x9b, 0x9a,
0x08, 0x1a, 0x08, 0x1a, 0x0a, 0x06, 0x21, 0x6f, 0x0c, 0x01, 0x10, 0x07, 0x22, 0x2a, 0x8d, 0x6e,
0x3a, 0x02, 0x04, 0x06, 0x22, 0x06, 0x04, 0x02, 0x4e, 0x7b, 0x6c, 0x2f, 0x10,
};
static const uint16_t mf_rlefont_arial12_glyph_offsets_0[95] = {
0x0000, 0x0003, 0x0015, 0x0021, 0x0049, 0x0071, 0x00a6, 0x00d0,
0x00d9, 0x00f3, 0x010a, 0x0118, 0x0123, 0x0129, 0x012f, 0x0134,
0x0149, 0x016a, 0x017c, 0x0199, 0x01b7, 0x01d3, 0x01f1, 0x0217,
0x022d, 0x0252, 0x0277, 0x027b, 0x0280, 0x0298, 0x02a3, 0x02b8,
0x02d2, 0x032b, 0x0350, 0x037b, 0x03a3, 0x03c0, 0x03d2, 0x03e1,
0x040d, 0x0421, 0x042a, 0x043e, 0x046b, 0x0479, 0x04ad, 0x04e0,
0x050e, 0x0527, 0x055a, 0x057c, 0x05ad, 0x05b7, 0x05d5, 0x05fa,
0x0635, 0x065e, 0x067e, 0x0699, 0x06a7, 0x06bc, 0x06cf, 0x06e1,
0x06e9, 0x06ee, 0x070f, 0x0726, 0x073c, 0x0752, 0x076e, 0x0781,
0x07a7, 0x07ba, 0x07c1, 0x07cd, 0x07ec, 0x07f2, 0x0812, 0x0826,
0x0843, 0x085a, 0x0870, 0x0882, 0x08a1, 0x08b2, 0x08c5, 0x08e4,
0x0912, 0x0930, 0x0951, 0x0969, 0x0985, 0x098d, 0x09ab,
};
static const struct mf_rlefont_char_range_s mf_rlefont_arial12_char_ranges[] = {
{32, 95, mf_rlefont_arial12_glyph_offsets_0, mf_rlefont_arial12_glyph_data_0},
};
const struct mf_rlefont_s mf_rlefont_arial12 = {
{
"Arial Regular 12",
"arial_12_arial12_aa",
13, /* width */
12, /* height */
2, /* min x advance */
12, /* max x advance */
1, /* baseline x */
9, /* baseline y */
14, /* line height */
0, /* flags */
63, /* fallback character */
&mf_rlefont_character_width,
&mf_rlefont_render_character,
},
4, /* version */
mf_rlefont_arial12_dictionary_data,
mf_rlefont_arial12_dictionary_offsets,
96, /* rle dict count */
135, /* total dict count */
1, /* char range count */
mf_rlefont_arial12_char_ranges,
};
#ifdef MF_INCLUDED_FONTS
/* List entry for searching fonts by name. */
static const struct mf_font_list_s mf_rlefont_arial12_listentry = {
MF_INCLUDED_FONTS,
(struct mf_font_s*)&mf_rlefont_arial12
};
#undef MF_INCLUDED_FONTS
#define MF_INCLUDED_FONTS (&mf_rlefont_arial12_listentry)
#endif
/* End of automatically generated font definition for arial12. */

View File

@ -0,0 +1,308 @@
/* Start of automatically generated font definition for arial14. */
#ifndef MF_RLEFONT_INTERNALS
#define MF_RLEFONT_INTERNALS
#endif
#include "mf_rlefont.h"
#ifndef MF_RLEFONT_VERSION_4_SUPPORTED
#error The font file is not compatible with this version of mcufont.
#endif
static const uint8_t mf_rlefont_arial14_dictionary_data[365] = {
0x06, 0x02, 0x0e, 0x04, 0x0a, 0x0b, 0x08, 0xcd, 0xc6, 0xc2, 0x0c, 0x07, 0x80, 0xc5, 0x09, 0x12,
0xc2, 0x02, 0xc4, 0x80, 0x0d, 0xc5, 0x80, 0xc4, 0xcb, 0xca, 0xc9, 0x01, 0x84, 0xcb, 0xca, 0x10,
0x0c, 0xce, 0xc9, 0xc7, 0xcd, 0xce, 0xcb, 0x40, 0x21, 0x85, 0xc9, 0x05, 0xce, 0xcb, 0xc7, 0xcb,
0x80, 0x01, 0xc9, 0x03, 0xc8, 0xcb, 0xc8, 0xcc, 0x83, 0xc3, 0xce, 0xc2, 0xc9, 0xcc, 0xc2, 0xcd,
0xc3, 0xc9, 0xcc, 0xc2, 0xcd, 0xca, 0xcc, 0xc9, 0x0d, 0xc1, 0x80, 0xc3, 0x80, 0x01, 0xc1, 0xc2,
0xcc, 0xc1, 0x80, 0xc2, 0xc4, 0xce, 0x01, 0xcb, 0xcc, 0xc2, 0xca, 0xcb, 0xc9, 0x05, 0xcc, 0xc9,
0xcb, 0xc2, 0xc1, 0xc3, 0xc7, 0xcc, 0xc1, 0x06, 0xc4, 0xcd, 0xc1, 0xc2, 0xc5, 0xcd, 0xc5, 0xcb,
0xce, 0xc5, 0x01, 0xc1, 0xca, 0x2e, 0xc8, 0xca, 0xc6, 0x80, 0xc2, 0x80, 0xda, 0xce, 0xc6, 0x01,
0xcd, 0xc9, 0xce, 0xca, 0x01, 0xc8, 0xc8, 0xcd, 0xce, 0xc2, 0xcd, 0xc8, 0xc6, 0xcd, 0xcd, 0x80,
0x11, 0x80, 0xc3, 0x82, 0xcb, 0xc5, 0xc6, 0xce, 0x01, 0xce, 0xcd, 0x01, 0xcc, 0xc3, 0x01, 0xcc,
0xca, 0xc7, 0xcb, 0x01, 0xc3, 0xc5, 0xce, 0xce, 0xcc, 0xc3, 0xca, 0x2f, 0xc4, 0x01, 0xce, 0xc3,
0x27, 0x6a, 0x27, 0x6a, 0x27, 0x6a, 0x27, 0x6a, 0x75, 0x2c, 0x18, 0x32, 0x2c, 0x65, 0x1e, 0x44,
0x25, 0x20, 0x5c, 0x20, 0x5c, 0x22, 0x27, 0x21, 0x57, 0x07, 0x19, 0x51, 0x1b, 0x44, 0x25, 0x07,
0x27, 0x0d, 0x07, 0x27, 0x0d, 0x0e, 0x01, 0x44, 0x20, 0x44, 0x20, 0x44, 0x0d, 0x01, 0x2e, 0x6d,
0x07, 0x23, 0x5f, 0x01, 0x01, 0x21, 0x01, 0x19, 0x04, 0x2e, 0x25, 0x51, 0x1e, 0x5c, 0x25, 0x51,
0x1e, 0x5c, 0x0c, 0x0b, 0x21, 0x5e, 0x38, 0x28, 0x26, 0x27, 0x68, 0x27, 0x68, 0x27, 0x5e, 0x38,
0x02, 0x0e, 0x2f, 0x01, 0x01, 0x68, 0x1d, 0x46, 0x68, 0x1d, 0x46, 0x68, 0x1d, 0x46, 0x68, 0x1d,
0x46, 0x68, 0x2e, 0x44, 0x28, 0x21, 0x0d, 0x07, 0x1b, 0x28, 0x21, 0x0d, 0x07, 0x38, 0x0e, 0x07,
0x1e, 0x44, 0x02, 0x21, 0x27, 0x04, 0x43, 0x09, 0x6e, 0x01, 0x2e, 0x6b, 0x2e, 0x6b, 0x2e, 0x2d,
0x48, 0x23, 0x24, 0x01, 0x0d, 0x01, 0x1e, 0x23, 0x02, 0x0b, 0x0e, 0x1d, 0x37, 0x67, 0x02, 0x0b,
0x0e, 0x2f, 0x01, 0x23, 0x5f, 0x54, 0x6f, 0x1e, 0x08, 0x07, 0x27, 0x0e, 0x08, 0x01, 0x1c, 0x22,
0x19, 0x01, 0x22, 0x4d, 0x0f, 0x0a, 0x27, 0x51, 0x05, 0x0c, 0x06, 0x0c, 0x00, 0x02, 0x00, 0x21,
0x44, 0x26, 0x01, 0x0a, 0x43, 0x0a, 0x43, 0x0a, 0x43, 0x0a, 0x43, 0x2a, 0x18,
};
static const uint16_t mf_rlefont_arial14_dictionary_offsets[148] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0009, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0012, 0x0014,
0x0015, 0x0017, 0x0019, 0x001c, 0x001d, 0x001f, 0x0020, 0x0021,
0x0023, 0x0025, 0x0027, 0x0029, 0x002a, 0x002d, 0x002f, 0x0031,
0x0033, 0x0034, 0x0036, 0x0038, 0x0039, 0x003b, 0x003d, 0x003f,
0x0041, 0x0043, 0x0045, 0x0047, 0x0049, 0x004b, 0x004d, 0x004f,
0x0051, 0x0054, 0x0057, 0x0059, 0x005b, 0x005d, 0x005e, 0x0060,
0x0062, 0x0064, 0x0066, 0x0068, 0x006a, 0x006c, 0x006e, 0x0070,
0x0073, 0x0075, 0x0076, 0x0078, 0x007a, 0x007c, 0x007d, 0x0080,
0x0082, 0x0084, 0x0086, 0x0088, 0x008a, 0x008c, 0x008e, 0x0090,
0x0091, 0x0093, 0x0094, 0x0096, 0x0099, 0x009b, 0x009d, 0x009f,
0x00a1, 0x00a3, 0x00a5, 0x00a7, 0x00a9, 0x00ab, 0x00ac, 0x00ae,
0x00b0, 0x00b8, 0x00bd, 0x00c1, 0x00c5, 0x00c7, 0x00c9, 0x00cf,
0x00d5, 0x00d7, 0x00dc, 0x00de, 0x00e1, 0x00e4, 0x00e6, 0x00e8,
0x00ea, 0x00f2, 0x00f4, 0x00f8, 0x00fa, 0x00fe, 0x0100, 0x0102,
0x0104, 0x0114, 0x011e, 0x0120, 0x0122, 0x0124, 0x0129, 0x012b,
0x012f, 0x0133, 0x0135, 0x0137, 0x013b, 0x013d, 0x0148, 0x014b,
0x014d, 0x014f, 0x0151, 0x0154, 0x0156, 0x0158, 0x015a, 0x015d,
0x015f, 0x0161, 0x0163, 0x016d,
};
static const uint8_t mf_rlefont_arial14_glyph_data_0[2988] = {
0x04, 0x00, 0x10, 0x04, 0x67, 0x89, 0x27, 0x89, 0x27, 0x89, 0x27, 0x2c, 0x27, 0x2a, 0x9c, 0x08,
0x27, 0x9e, 0x07, 0x06, 0x1c, 0x24, 0x2c, 0x10, 0x05, 0x2d, 0x28, 0x02, 0x22, 0x1c, 0x28, 0x02,
0x22, 0x1c, 0x49, 0x68, 0x23, 0x46, 0x0c, 0x6d, 0x01, 0x10, 0x08, 0x24, 0x29, 0x00, 0x8e, 0x23,
0x61, 0x08, 0x00, 0x56, 0x1c, 0x6a, 0x61, 0x07, 0x1e, 0x0d, 0x33, 0x09, 0x1e, 0x41, 0x19, 0x80,
0x23, 0x05, 0x0a, 0x00, 0x41, 0x23, 0x0d, 0x33, 0x09, 0x21, 0x6d, 0x04, 0x37, 0x07, 0x1c, 0x80,
0x6d, 0x03, 0x1e, 0x71, 0x0d, 0x19, 0x0e, 0x10, 0x08, 0x38, 0x61, 0x03, 0x1c, 0x71, 0x0c, 0x0f,
0x60, 0x85, 0x46, 0x9f, 0x08, 0x05, 0x2c, 0x1e, 0x45, 0x61, 0x03, 0x1c, 0x02, 0x68, 0x08, 0x03,
0x1d, 0x72, 0x5f, 0x04, 0x1c, 0x46, 0x09, 0x09, 0x64, 0x1c, 0x61, 0x03, 0x26, 0x1c, 0x61, 0x03,
0x45, 0x85, 0x72, 0x04, 0x08, 0x56, 0x0b, 0x23, 0x06, 0x66, 0x60, 0xa0, 0x61, 0x03, 0x10, 0x0c,
0x67, 0x06, 0x6c, 0x04, 0x19, 0x6d, 0x03, 0x1b, 0x46, 0x77, 0x49, 0x00, 0x06, 0x09, 0x18, 0x8e,
0xf8, 0x01, 0x99, 0x02, 0x4d, 0x46, 0x77, 0x49, 0x07, 0x08, 0x1e, 0x06, 0x6c, 0x04, 0x01, 0x82,
0x9c, 0x07, 0x01, 0x0b, 0x60, 0x1e, 0x41, 0x00, 0x5a, 0x01, 0x0b, 0x06, 0x21, 0x0a, 0x05, 0x00,
0x0a, 0x06, 0x61, 0x08, 0x4d, 0x71, 0x0c, 0x19, 0x5a, 0x01, 0x0b, 0x06, 0x4d, 0x6d, 0x76, 0x46,
0x0b, 0x60, 0x10, 0x09, 0x24, 0x53, 0x60, 0xa0, 0x0e, 0x06, 0x01, 0x0c, 0x08, 0x00, 0x93, 0x6e,
0x2a, 0x23, 0x40, 0x55, 0x02, 0x23, 0x61, 0x0f, 0x63, 0x1c, 0x4a, 0x04, 0x9f, 0x00, 0x07, 0x02,
0x18, 0x26, 0x02, 0x71, 0xa3, 0x0f, 0x52, 0x28, 0x86, 0x06, 0xa3, 0x18, 0x46, 0x8f, 0x47, 0x0d,
0x0e, 0x04, 0x18, 0x71, 0x36, 0x9f, 0x01, 0x07, 0x09, 0x10, 0x03, 0x2d, 0x5b, 0x27, 0x5b, 0x27,
0x49, 0x2e, 0x02, 0x0b, 0x10, 0x05, 0x24, 0x47, 0x27, 0x6a, 0x1d, 0x71, 0x0d, 0x27, 0x0a, 0x08,
0x18, 0x7d, 0x1c, 0x46, 0x68, 0x2e, 0x5c, 0x20, 0x01, 0x68, 0x18, 0x7d, 0x9c, 0x08, 0x2e, 0x71,
0x0d, 0x1a, 0x6a, 0x27, 0x47, 0x10, 0x05, 0x67, 0x3e, 0x27, 0x56, 0x1a, 0x3f, 0x2e, 0x61, 0x43,
0x72, 0x27, 0x45, 0x96, 0x5c, 0x20, 0x45, 0x96, 0x72, 0x00, 0x9c, 0x43, 0x77, 0x2e, 0x56, 0x27,
0x3e, 0x10, 0x05, 0x24, 0x3e, 0x1d, 0x06, 0x42, 0x5a, 0x1d, 0x06, 0x60, 0x01, 0x1d, 0x0a, 0x03,
0x4f, 0x10, 0x08, 0x19, 0x75, 0x5a, 0x27, 0x5a, 0x27, 0x5a, 0x23, 0x71, 0x33, 0x06, 0x1c, 0x5a,
0x27, 0x5a, 0x27, 0x5a, 0x10, 0x04, 0x1e, 0x75, 0x32, 0x2c, 0x95, 0x10, 0x05, 0x1e, 0x32, 0x61,
0xff, 0x68, 0x10, 0x04, 0x1e, 0x75, 0x32, 0x2c, 0x10, 0x04, 0x24, 0x29, 0x27, 0x9e, 0x0c, 0x20,
0x41, 0x27, 0x06, 0x43, 0x0a, 0x04, 0x27, 0x0e, 0x96, 0x29, 0x00, 0x9c, 0x06, 0x27, 0x0d, 0x02,
0x10, 0x08, 0x67, 0x58, 0x0e, 0x92, 0x1c, 0x0a, 0x0b, 0x50, 0x1f, 0x1e, 0x5c, 0x25, 0xa6, 0x21,
0x72, 0x38, 0x45, 0x1e, 0x65, 0x38, 0x5c, 0x85, 0x65, 0x38, 0x5c, 0x85, 0x72, 0x38, 0x45, 0x1e,
0x5c, 0x25, 0xa6, 0x1e, 0x0b, 0x0b, 0x50, 0x1f, 0x23, 0x58, 0x0e, 0x92, 0x10, 0x08, 0x24, 0x46,
0x3f, 0x1d, 0x47, 0x68, 0x1c, 0x04, 0x2f, 0x68, 0x1c, 0x04, 0x6e, 0x8c, 0x8c, 0x8c, 0x68, 0x10,
0x08, 0x9d, 0x03, 0xe5, 0x72, 0x27, 0x65, 0x1d, 0x46, 0x64, 0x1c, 0x46, 0x2c, 0x1c, 0x46, 0x6f,
0x1d, 0x02, 0x64, 0x1c, 0x46, 0x64, 0x2e, 0x07, 0x33, 0x01, 0x10, 0x08, 0x67, 0x58, 0x6c, 0x07,
0x1c, 0x4c, 0x50, 0x5e, 0x21, 0x5c, 0x86, 0x2a, 0x1d, 0x04, 0x57, 0x1c, 0x66, 0x0b, 0x96, 0x01,
0x4a, 0x27, 0x45, 0x94, 0x49, 0x19, 0x26, 0x9a, 0x5f, 0x50, 0x5f, 0x9b, 0x64, 0x10, 0x08, 0x1e,
0x9c, 0x0b, 0x2e, 0x26, 0x0b, 0x2e, 0x0d, 0x89, 0x1d, 0x5a, 0x70, 0x23, 0x71, 0x80, 0x70, 0x23,
0x6d, 0x06, 0x00, 0x70, 0x23, 0x39, 0x19, 0x70, 0x1e, 0x6d, 0x33, 0x02, 0x1d, 0x70, 0x27, 0x70,
0x10, 0x08, 0x67, 0x05, 0x3b, 0x0b, 0x23, 0x5a, 0x27, 0x35, 0x27, 0x31, 0x0e, 0x2f, 0x9a, 0x5c,
0x08, 0x50, 0x6f, 0x27, 0x26, 0x96, 0x02, 0x68, 0x21, 0x26, 0x86, 0x26, 0x52, 0x46, 0x5f, 0x50,
0x64, 0x9b, 0x9f, 0x10, 0x08, 0x18, 0x9c, 0x0e, 0x0e, 0x4f, 0x1e, 0x37, 0x0d, 0x02, 0x01, 0x42,
0x93, 0x87, 0x72, 0x27, 0x06, 0x0c, 0x65, 0x60, 0x9a, 0x07, 0x2f, 0x54, 0x0b, 0x0b, 0x1e, 0x06,
0xe5, 0x45, 0x85, 0x45, 0x86, 0x45, 0x9a, 0x0b, 0x0b, 0x54, 0x2c, 0x23, 0x58, 0x0e, 0x8f, 0x10,
0x08, 0x2d, 0x05, 0x33, 0x20, 0x4e, 0x2e, 0x30, 0x2e, 0x8e, 0x87, 0x3a, 0x27, 0x5e, 0x1d, 0x28,
0x01, 0x9c, 0x0b, 0x2e, 0x6d, 0x43, 0x1f, 0x10, 0x08, 0x67, 0x4b, 0x0e, 0x64, 0x1c, 0x2c, 0x01,
0x41, 0x07, 0x4d, 0xd4, 0x04, 0x19, 0x39, 0x23, 0x2c, 0x01, 0x41, 0x07, 0x23, 0x8e, 0xff, 0x0b,
0x1e, 0x46, 0x9f, 0x54, 0x6f, 0x1e, 0x6b, 0x19, 0x45, 0x85, 0x72, 0x38, 0x45, 0x52, 0x46, 0x2f,
0x54, 0x0b, 0x0b, 0x1e, 0x71, 0x0b, 0x0e, 0x8f, 0x10, 0x08, 0x2d, 0x71, 0x0b, 0x6c, 0x07, 0x1e,
0x46, 0x8f, 0x47, 0x07, 0x1e, 0x72, 0x38, 0x53, 0x1e, 0x72, 0x38, 0x26, 0x52, 0x46, 0x9f, 0x54,
0x36, 0x94, 0x71, 0x0c, 0x73, 0x28, 0x20, 0x26, 0x96, 0x3a, 0x93, 0x05, 0x01, 0x05, 0x22, 0x23,
0xa5, 0x0f, 0x1f, 0x10, 0x04, 0x79, 0x10, 0x04, 0x79, 0x95, 0x10, 0x08, 0x1b, 0x75, 0x3d, 0x06,
0x1c, 0x04, 0x0a, 0x1f, 0x9a, 0xa5, 0x1f, 0x1c, 0x04, 0xa3, 0x27, 0xa5, 0x1f, 0x27, 0x04, 0x0a,
0x1f, 0x96, 0x3d, 0x06, 0x10, 0x08, 0x27, 0x75, 0x71, 0x33, 0x06, 0x24, 0x24, 0x71, 0x33, 0x06,
0x10, 0x08, 0x59, 0x74, 0x03, 0x27, 0xa5, 0x6a, 0x27, 0xa5, 0x1f, 0x96, 0x08, 0x0f, 0x06, 0x1c,
0xa5, 0x1f, 0x9a, 0xa5, 0x0c, 0x05, 0x1c, 0x74, 0x03, 0x10, 0x08, 0x9d, 0x26, 0x86, 0x8b, 0x6b,
0x1d, 0x04, 0x5e, 0x1c, 0x02, 0x92, 0x9c, 0x0a, 0x27, 0x35, 0x1c, 0x24, 0x64, 0x10, 0x0e, 0x19,
0x24, 0x56, 0x66, 0x0d, 0x0a, 0x05, 0x4d, 0x46, 0x4a, 0x06, 0xa7, 0x02, 0x65, 0x0a, 0x4d, 0x4c,
0x4d, 0x46, 0x0b, 0x08, 0x38, 0x56, 0x00, 0x61, 0x6c, 0x72, 0x05, 0x8e, 0x86, 0x0c, 0x76, 0x0a,
0x4f, 0x47, 0x0f, 0xa7, 0x0b, 0x04, 0x46, 0x0e, 0x00, 0x26, 0x25, 0x30, 0x19, 0x0a, 0x05, 0x71,
0x0c, 0x00, 0x39, 0x38, 0x5a, 0x19, 0x3f, 0x71, 0x0d, 0x37, 0x0a, 0x38, 0x0d, 0x07, 0x00, 0xa5,
0x00, 0x46, 0x80, 0x05, 0x77, 0x4b, 0x22, 0x55, 0x02, 0x38, 0x35, 0x61, 0x6c, 0x04, 0x0c, 0x0e,
0x4f, 0x1b, 0x3c, 0x04, 0x21, 0x41, 0x05, 0x38, 0x04, 0x60, 0x04, 0x01, 0x00, 0x50, 0x08, 0x8d,
0x46, 0x70, 0x0e, 0x0f, 0x73, 0x08, 0x25, 0x09, 0x00, 0x24, 0x5b, 0x07, 0x2e, 0x2c, 0x0d, 0x1d,
0x5c, 0x8e, 0x04, 0x1c, 0x39, 0x37, 0x0a, 0x1c, 0x1f, 0x00, 0x26, 0x02, 0x1e, 0x26, 0x86, 0x9f,
0x1e, 0x0a, 0x2b, 0x0e, 0xa8, 0x04, 0x38, 0x02, 0x22, 0x18, 0x07, 0x0e, 0x4d, 0x0b, 0x0b, 0x18,
0x4e, 0x4d, 0x28, 0x02, 0x10, 0x09, 0x2d, 0xe2, 0x31, 0x03, 0x1e, 0xa1, 0x58, 0x0e, 0x1e, 0x22,
0x38, 0x26, 0x85, 0xa1, 0x58, 0x07, 0x1e, 0x33, 0x08, 0x1e, 0xa1, 0x01, 0x07, 0x22, 0x21, 0x22,
0x1b, 0x64, 0x21, 0x22, 0x1b, 0x0d, 0x07, 0x21, 0xa1, 0x01, 0x07, 0x0f, 0x94, 0x3b, 0x31, 0x04,
0x10, 0x0a, 0x24, 0x3d, 0x66, 0x0d, 0x07, 0x1e, 0x02, 0x2f, 0x02, 0x01, 0x53, 0x0a, 0x21, 0x2c,
0x38, 0x71, 0x77, 0x4d, 0x5c, 0x87, 0x26, 0x96, 0x26, 0x20, 0x44, 0x04, 0x4d, 0x06, 0x02, 0x18,
0x2c, 0x1b, 0x45, 0x04, 0x4d, 0x71, 0x2f, 0x02, 0x01, 0x53, 0x0a, 0x1e, 0x74, 0x0e, 0x0f, 0x0d,
0x07, 0x10, 0x0a, 0x67, 0x0e, 0x69, 0x73, 0x05, 0x1e, 0x5e, 0x46, 0x06, 0x22, 0x21, 0x8d, 0x62,
0x21, 0x8d, 0x02, 0x68, 0x18, 0x8d, 0xa2, 0x00, 0x8d, 0xa2, 0x00, 0x8d, 0x03, 0x68, 0x18, 0x8d,
0x62, 0x21, 0x5e, 0x46, 0x06, 0x57, 0x18, 0x0e, 0x69, 0x31, 0x04, 0x10, 0x09, 0x67, 0x0d, 0x2b,
0x22, 0x21, 0x0d, 0x07, 0x27, 0x0d, 0x7f, 0x33, 0x1e, 0x0d, 0x7f, 0x7f, 0x33, 0x09, 0x10, 0x09,
0x67, 0x0d, 0x2b, 0x0e, 0x1e, 0x0d, 0x07, 0x27, 0x0d, 0x7f, 0x3b, 0x68, 0x1e, 0x0d, 0x7f, 0x7f,
0x07, 0x10, 0x0b, 0x67, 0x46, 0x08, 0x66, 0x31, 0x03, 0x21, 0x99, 0x0b, 0x03, 0x46, 0x07, 0x0f,
0x04, 0x18, 0x42, 0x1b, 0x37, 0x0a, 0x4d, 0xa2, 0x52, 0x45, 0x20, 0x45, 0x25, 0x04, 0x3b, 0x4d,
0xa2, 0x26, 0x18, 0x0a, 0x0b, 0x4d, 0x26, 0x18, 0x99, 0x0b, 0x03, 0x01, 0x01, 0x65, 0x0c, 0x18,
0x46, 0x51, 0x0e, 0x31, 0x06, 0x10, 0x0a, 0x67, 0x0d, 0x07, 0x1b, 0x91, 0x00, 0x28, 0x21, 0x0d,
0x07, 0x1b, 0x28, 0x21, 0x66, 0x33, 0x21, 0x0d, 0x07, 0x1b, 0x91, 0x00, 0x91, 0x00, 0x28, 0x10,
0x04, 0x67, 0xaa, 0x18, 0xaa, 0x10, 0x07, 0x19, 0x24, 0x97, 0x97, 0x97, 0x6b, 0x1e, 0x07, 0x0a,
0x19, 0x30, 0x23, 0x05, 0x63, 0x02, 0x4e, 0x23, 0x61, 0x0e, 0x60, 0x01, 0x10, 0x09, 0x67, 0xa1,
0x71, 0x2f, 0x21, 0xa1, 0x03, 0x2f, 0x1e, 0x22, 0x71, 0x2f, 0x23, 0x22, 0x02, 0x2f, 0x18, 0xd4,
0x30, 0x68, 0x18, 0xd4, 0xa3, 0x0b, 0x82, 0x4d, 0xd4, 0x0c, 0x54, 0x60, 0x23, 0xa1, 0x26, 0x06,
0x1e, 0xa1, 0x61, 0x68, 0x21, 0x22, 0x38, 0x6d, 0x82, 0x10, 0x08, 0x67, 0x7c, 0x7c, 0x7c, 0x7c,
0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x33, 0x04, 0x10, 0x0c, 0x67, 0x0e, 0x68, 0x1b, 0x28, 0x34, 0x64,
0x1b, 0x0b, 0x0d, 0x34, 0x62, 0x19, 0x46, 0x6f, 0x34, 0x05, 0x3f, 0x19, 0x06, 0x5a, 0x34, 0x05,
0x08, 0x08, 0x19, 0x0b, 0x74, 0x34, 0x05, 0x53, 0x00, 0x99, 0x00, 0x2a, 0x1b, 0x57, 0x77, 0x06,
0x08, 0x00, 0x0a, 0x34, 0x05, 0x37, 0x39, 0x6e, 0x2a, 0x1b, 0x57, 0x04, 0x6c, 0x19, 0x0a, 0x34,
0x05, 0x19, 0x2f, 0x19, 0x2a, 0x10, 0x0a, 0x67, 0x31, 0x1b, 0x28, 0x21, 0x6c, 0x05, 0x38, 0x28,
0x21, 0x0e, 0x06, 0x0c, 0x86, 0x28, 0x21, 0x0e, 0x05, 0x05, 0x08, 0x19, 0x28, 0x7d, 0x0b, 0x6e,
0x28, 0x7d, 0x02, 0x0b, 0x00, 0x28, 0x7d, 0x61, 0x06, 0x28, 0x7d, 0x46, 0x0c, 0x5b, 0x7d, 0x19,
0x05, 0x66, 0x7d, 0x38, 0x0a, 0x0f, 0x10, 0x0b, 0x24, 0x3d, 0x66, 0x64, 0x85, 0x02, 0x60, 0x03,
0x50, 0x0b, 0x0d, 0x52, 0x2c, 0x4d, 0x6f, 0x4d, 0x5c, 0x04, 0x4d, 0x28, 0x01, 0x1b, 0xa9, 0x4d,
0x02, 0x68, 0x1b, 0xa9, 0x1b, 0x71, 0x68, 0x1b, 0x5c, 0x04, 0x4d, 0x28, 0x01, 0x4d, 0x0b, 0x0b,
0x4d, 0x6f, 0x18, 0x02, 0x60, 0xa7, 0x4b, 0x0d, 0x94, 0x01, 0x09, 0x66, 0x64, 0x01, 0x10, 0x09,
0x67, 0x0e, 0x3b, 0x1f, 0x1e, 0x5e, 0x19, 0x04, 0x22, 0x21, 0x8d, 0x2c, 0x21, 0x8d, 0x2c, 0x21,
0x5e, 0x46, 0x5b, 0x04, 0x21, 0x0e, 0x3b, 0x0c, 0x06, 0x1e, 0x5e, 0x2e, 0x5e, 0x2e, 0x5e, 0x2e,
0x5e, 0x10, 0x0b, 0x24, 0x3d, 0x66, 0x64, 0x52, 0x71, 0x2f, 0x03, 0x50, 0x0b, 0x0d, 0x52, 0x6f,
0x4d, 0x5f, 0x1b, 0x71, 0x68, 0x4d, 0x6b, 0x1b, 0x28, 0x01, 0x4d, 0x45, 0x02, 0x1b, 0x28, 0x01,
0x4d, 0x45, 0x02, 0x38, 0x71, 0x68, 0x4d, 0x5b, 0x01, 0x4d, 0x6f, 0x19, 0x05, 0x08, 0x01, 0x6f,
0x4d, 0x71, 0x2f, 0x02, 0x03, 0x0c, 0x0f, 0x0e, 0x94, 0x3d, 0x66, 0x31, 0x31, 0x20, 0x01, 0x06,
0x01, 0x10, 0x0a, 0x67, 0x0e, 0x3b, 0x60, 0x94, 0x5e, 0x00, 0x71, 0x89, 0x8a, 0x52, 0x8d, 0x28,
0x52, 0x5e, 0x00, 0x71, 0x6f, 0x21, 0x0e, 0x3b, 0x2f, 0x85, 0x5e, 0x01, 0x62, 0x02, 0x1e, 0x5e,
0x00, 0x37, 0x0d, 0x94, 0x8d, 0x0c, 0x0c, 0x21, 0x8d, 0x02, 0x2f, 0x10, 0x09, 0x2d, 0x46, 0x08,
0x66, 0x2f, 0x9a, 0x42, 0x6e, 0x02, 0x4a, 0x00, 0x7d, 0x19, 0x02, 0x68, 0x18, 0x6d, 0x0c, 0x03,
0x2e, 0x47, 0x0f, 0x60, 0x06, 0xa0, 0x02, 0x07, 0x0a, 0x0f, 0x0d, 0x96, 0x02, 0x9f, 0x18, 0xa9,
0x1b, 0x0b, 0x08, 0x21, 0x89, 0x03, 0x01, 0x01, 0x05, 0x77, 0x18, 0x46, 0x09, 0x66, 0x31, 0x03,
0x10, 0x09, 0x2d, 0x0a, 0x0f, 0x33, 0x04, 0x23, 0x97, 0x97, 0x97, 0x97, 0x6b, 0x10, 0x0a, 0x1c,
0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x21, 0x0d, 0x07, 0x1b, 0x6b, 0x18, 0x4c, 0x1b, 0x3a, 0x21,
0x28, 0x06, 0x01, 0x01, 0x72, 0x05, 0x1e, 0xa5, 0x0e, 0x73, 0x05, 0x10, 0x09, 0x2d, 0x2c, 0x4d,
0x28, 0x01, 0x4d, 0x28, 0x01, 0x1b, 0x2c, 0x21, 0x92, 0x38, 0x5c, 0x04, 0x21, 0x40, 0x38, 0x30,
0x21, 0x71, 0x68, 0x19, 0x0d, 0x07, 0x1e, 0x6d, 0x08, 0x00, 0xa9, 0x23, 0x6b, 0x5d, 0x19, 0x93,
0x28, 0x04, 0x1d, 0x0a, 0x6c, 0x2e, 0x26, 0x08, 0x10, 0x0d, 0x2d, 0x2c, 0x38, 0x28, 0x09, 0x38,
0x6b, 0x00, 0x30, 0x19, 0x37, 0x0d, 0x0d, 0x38, 0x5d, 0x19, 0x45, 0x25, 0x0d, 0x28, 0x25, 0x1f,
0x38, 0x57, 0x8e, 0x6d, 0x06, 0x00, 0x5c, 0x02, 0x38, 0x2a, 0x06, 0x0b, 0x00, 0x70, 0x00, 0xa6,
0x38, 0xa6, 0x35, 0x00, 0x3c, 0x37, 0x08, 0x1b, 0x5c, 0x01, 0x0e, 0x25, 0x0e, 0x53, 0x04, 0x4d,
0x0d, 0x0c, 0x0d, 0x38, 0x42, 0x0f, 0x4d, 0x37, 0x0f, 0x09, 0x38, 0x5b, 0x0b, 0x18, 0x05, 0x22,
0x38, 0x5c, 0x07, 0x10, 0x09, 0x2d, 0x02, 0x92, 0x1b, 0x4e, 0x21, 0x5b, 0x6e, 0x37, 0x0d, 0x9a,
0x0b, 0x82, 0x05, 0x68, 0x1e, 0x46, 0x60, 0x5e, 0x1c, 0x28, 0x0b, 0x9c, 0x0f, 0x63, 0x1c, 0x28,
0x04, 0x89, 0x23, 0x02, 0x92, 0x00, 0x45, 0x07, 0x1e, 0x89, 0x38, 0x07, 0x68, 0x4d, 0x61, 0x80,
0x1b, 0x0b, 0x82, 0x10, 0x09, 0x1b, 0x9c, 0x80, 0x1b, 0x0a, 0x82, 0x4d, 0x99, 0x0a, 0x38, 0x05,
0x68, 0x21, 0x04, 0x22, 0x46, 0x92, 0x1e, 0x37, 0x80, 0x42, 0x1c, 0x99, 0x0d, 0x63, 0x1d, 0x26,
0x07, 0x1b, 0x93, 0x87, 0x44, 0x87, 0x44, 0x87, 0x44, 0x04, 0x10, 0x09, 0x2d, 0x5c, 0x33, 0x01,
0x1d, 0x99, 0x0a, 0x2e, 0x4a, 0x01, 0x1d, 0x07, 0x63, 0x1d, 0x26, 0x04, 0x1d, 0x02, 0x92, 0x2e,
0x89, 0x9c, 0x82, 0x1d, 0x05, 0x68, 0x2e, 0x0b, 0x33, 0x68, 0x10, 0x04, 0x1e, 0x93, 0xa3, 0x1d,
0x90, 0x03, 0x2e, 0x90, 0xa3, 0x10, 0x04, 0x2d, 0x0d, 0xa7, 0x9c, 0x06, 0x27, 0x29, 0x1a, 0x80,
0x27, 0x0a, 0x04, 0x27, 0x06, 0x43, 0x41, 0x1a, 0x3e, 0x27, 0x9e, 0x29, 0x10, 0x04, 0x2d, 0x0b,
0xff, 0x27, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x26, 0x2e, 0x0b, 0xff,
0x10, 0x07, 0x24, 0x07, 0x0e, 0x96, 0x5f, 0x08, 0x1d, 0x06, 0x0a, 0x8e, 0xa0, 0x0d, 0x76, 0x0a,
0x07, 0x23, 0x65, 0x19, 0x04, 0x80, 0x10, 0x08, 0x00, 0x32, 0x32, 0x45, 0x33, 0x0e, 0x10, 0x05,
0x2d, 0x01, 0x92, 0x2e, 0x71, 0x0d, 0x10, 0x08, 0x75, 0x04, 0x0c, 0x0e, 0x0f, 0x0c, 0x03, 0x1e,
0x02, 0x22, 0x00, 0x02, 0x6f, 0xa4, 0x1e, 0x46, 0x06, 0x09, 0x0b, 0x73, 0x1e, 0x99, 0x0c, 0x07,
0x04, 0x51, 0x1e, 0x6b, 0x19, 0x40, 0x1e, 0x05, 0x77, 0x01, 0x5b, 0x0d, 0x1e, 0x37, 0x0e, 0x60,
0x5b, 0x01, 0x10, 0x08, 0x2d, 0x81, 0x30, 0x2f, 0x00, 0x93, 0x0d, 0x02, 0x02, 0x4e, 0x93, 0x04,
0x19, 0x26, 0x93, 0x86, 0x48, 0xa8, 0x86, 0x5c, 0x02, 0xa8, 0x04, 0x19, 0x72, 0x93, 0x3e, 0x02,
0x64, 0x93, 0x07, 0x0e, 0x2f, 0x10, 0x07, 0x75, 0x4b, 0x0e, 0x2f, 0x1c, 0x6f, 0x54, 0x0b, 0x08,
0x1e, 0x26, 0x96, 0x65, 0x27, 0x65, 0x27, 0xa9, 0x27, 0x6f, 0x54, 0x5d, 0x23, 0x02, 0x36, 0x8f,
0x10, 0x08, 0x1e, 0xa4, 0xa4, 0x1e, 0x71, 0x36, 0x0c, 0x40, 0x84, 0x05, 0x73, 0x1e, 0x72, 0x86,
0x40, 0x1e, 0x51, 0x38, 0xa6, 0x21, 0x51, 0x38, 0xa6, 0x21, 0x72, 0x86, 0x3a, 0x84, 0x04, 0x73,
0x23, 0x02, 0x36, 0x0c, 0x3a, 0x10, 0x08, 0x75, 0x58, 0x0e, 0x64, 0x01, 0x23, 0x4e, 0x54, 0x4c,
0x1e, 0x49, 0x19, 0x45, 0x1e, 0x06, 0x33, 0x94, 0x65, 0x27, 0x26, 0x20, 0x6d, 0x4f, 0x02, 0x62,
0x23, 0x4b, 0x0e, 0x0e, 0x4f, 0x10, 0x04, 0x67, 0x06, 0x0e, 0x0f, 0x04, 0x1c, 0x6d, 0x08, 0x2e,
0x0d, 0xff, 0x0d, 0x1d, 0x6d, 0x07, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x10, 0x08, 0x75, 0x02,
0x0b, 0x73, 0x30, 0x84, 0x04, 0x6c, 0x1e, 0x72, 0x38, 0x62, 0x1e, 0x3a, 0x38, 0x55, 0x1e, 0x51,
0x38, 0x55, 0x1e, 0x72, 0x38, 0x62, 0x84, 0x04, 0x6c, 0x1e, 0x71, 0x0c, 0x31, 0x3a, 0x27, 0x39,
0x1e, 0x45, 0x04, 0x71, 0x1f, 0x23, 0x07, 0x66, 0x0d, 0x07, 0x10, 0x08, 0x2d, 0x81, 0x30, 0x31,
0x01, 0x93, 0x3e, 0x01, 0x4e, 0x93, 0x04, 0x19, 0x51, 0x93, 0x25, 0x7a, 0x7a, 0x7a, 0x7a, 0x65,
0x10, 0x03, 0x98, 0x44, 0x20, 0x81, 0x20, 0x81, 0x20, 0x48, 0x10, 0x03, 0x98, 0x81, 0x20, 0x81,
0x20, 0x81, 0x20, 0xa9, 0x1d, 0x07, 0x9f, 0x10, 0x07, 0x2d, 0x81, 0xa7, 0x06, 0x0e, 0x04, 0x1e,
0x48, 0x28, 0x76, 0x93, 0x06, 0xa1, 0x93, 0x0f, 0x68, 0x19, 0x93, 0x07, 0x40, 0x1c, 0x48, 0x01,
0x5e, 0x93, 0xa7, 0x07, 0x80, 0x93, 0x25, 0x0d, 0x0a, 0x10, 0x03, 0x2d, 0x5c, 0x20, 0x5c, 0x7b,
0x7b, 0x7b, 0x7b, 0x02, 0x10, 0x0c, 0x59, 0x44, 0x55, 0x60, 0x47, 0x0e, 0x4f, 0x1b, 0x44, 0x4f,
0x45, 0x77, 0x01, 0x4e, 0x1b, 0x44, 0x04, 0x19, 0x4e, 0x19, 0x70, 0x1b, 0x44, 0x6e, 0x6d, 0x7e,
0x0c, 0x7e, 0x0c, 0x7e, 0x0c, 0x7e, 0x0c, 0x07, 0x19, 0x51, 0x10, 0x08, 0x59, 0x44, 0x06, 0x66,
0x4f, 0x93, 0x3e, 0x02, 0x4e, 0x21, 0x46, 0xa1, 0x51, 0x93, 0x03, 0x19, 0xa6, 0xa8, 0x25, 0xa6,
0xa8, 0x25, 0xa6, 0xa8, 0x25, 0xa6, 0xa8, 0x25, 0xa6, 0x10, 0x08, 0x75, 0x4b, 0x0e, 0x2f, 0x1c,
0x0d, 0x0a, 0x54, 0x4e, 0x1e, 0x72, 0x86, 0x26, 0x85, 0x51, 0x19, 0x46, 0x68, 0x21, 0x51, 0x19,
0x46, 0x68, 0x21, 0x72, 0x86, 0x26, 0x9a, 0x0d, 0x0a, 0x54, 0x6f, 0x9b, 0x9f, 0x10, 0x08, 0x59,
0x44, 0x65, 0x8f, 0x93, 0x3f, 0x02, 0x4e, 0x21, 0x46, 0xa1, 0xa9, 0xa8, 0x86, 0x01, 0x68, 0xa8,
0x86, 0x48, 0xa8, 0x04, 0x19, 0x49, 0xa8, 0x3e, 0x47, 0x08, 0x93, 0x62, 0x9f, 0x23, 0x81, 0x02,
0x10, 0x08, 0x59, 0x71, 0x36, 0x0c, 0x51, 0x84, 0x05, 0x73, 0x1e, 0x72, 0x86, 0x40, 0x1e, 0x51,
0x38, 0xa6, 0x21, 0xa6, 0x19, 0xa6, 0x21, 0x04, 0x0e, 0x86, 0x3a, 0x23, 0x4e, 0x01, 0x04, 0x73,
0x23, 0x02, 0x36, 0x0c, 0x40, 0xa4, 0xa4, 0xa4, 0x10, 0x05, 0x59, 0x44, 0x08, 0x2f, 0x23, 0x46,
0xa3, 0x01, 0x25, 0x93, 0x87, 0x01, 0x68, 0x2e, 0x81, 0x20, 0x48, 0x10, 0x07, 0x75, 0x65, 0x73,
0x05, 0x23, 0x3c, 0x6e, 0x28, 0x9a, 0x05, 0x63, 0x27, 0x36, 0x0c, 0x07, 0x02, 0x1c, 0x71, 0x62,
0x63, 0x27, 0x1f, 0x1e, 0x55, 0x6e, 0x04, 0x68, 0x1e, 0x61, 0x66, 0x1f, 0x10, 0x04, 0x00, 0x46,
0x20, 0x6d, 0x06, 0x27, 0x1f, 0x2e, 0x0b, 0xff, 0x09, 0x2e, 0x1f, 0x27, 0x1f, 0x27, 0x1f, 0x27,
0x1f, 0x27, 0x1f, 0x83, 0x96, 0x06, 0x60, 0x10, 0x08, 0x59, 0x5c, 0x88, 0x88, 0x25, 0x51, 0x93,
0x03, 0x19, 0x40, 0x84, 0x04, 0x73, 0x23, 0x04, 0x66, 0x0b, 0x51, 0x10, 0x07, 0x59, 0x5d, 0x19,
0x37, 0x0a, 0x1e, 0x72, 0x38, 0x57, 0x1e, 0x0e, 0x76, 0x49, 0x1e, 0x37, 0x09, 0x37, 0x0a, 0x1c,
0x49, 0x0e, 0x04, 0x1d, 0x92, 0x0e, 0x9c, 0x2f, 0x2e, 0x26, 0x04, 0x10, 0x0a, 0x59, 0x0c, 0x06,
0x19, 0x42, 0x19, 0x55, 0x4d, 0x5a, 0x19, 0x0e, 0x0f, 0x01, 0x37, 0x09, 0x4d, 0x53, 0x00, 0x41,
0x0d, 0x04, 0x6d, 0x04, 0x18, 0x63, 0x06, 0x09, 0x35, 0x01, 0x0e, 0x52, 0x0b, 0x06, 0x09, 0x06,
0x07, 0x0a, 0x56, 0x21, 0x06, 0x0a, 0x0d, 0x02, 0x03, 0x60, 0x07, 0x21, 0x5c, 0x0e, 0x19, 0x0e,
0x0f, 0x02, 0x1e, 0x0d, 0x0a, 0x19, 0x0a, 0x0d, 0x10, 0x07, 0x59, 0x5b, 0x02, 0x46, 0x5e, 0x1e,
0x4c, 0x00, 0x39, 0x1c, 0x02, 0x92, 0x63, 0x1d, 0x07, 0x0f, 0x07, 0x2e, 0x0a, 0xa3, 0x1d, 0x26,
0x07, 0x22, 0x1e, 0x46, 0x64, 0x37, 0x0d, 0x85, 0x37, 0x82, 0x46, 0x5f, 0x10, 0x07, 0x59, 0x09,
0x0b, 0x38, 0x39, 0x1e, 0x26, 0x86, 0x0d, 0x05, 0x23, 0x5e, 0x5c, 0x9a, 0x37, 0x0b, 0x00, 0x07,
0x0a, 0x1c, 0xa9, 0x0c, 0x05, 0x1d, 0x64, 0x0e, 0xa0, 0x61, 0xa3, 0x1d, 0x71, 0x22, 0x2e, 0x8e,
0x1d, 0x46, 0x09, 0x08, 0x1d, 0x02, 0x31, 0xa0, 0x07, 0x59, 0x07, 0x2b, 0x07, 0x2e, 0x07, 0x80,
0x1d, 0x26, 0x04, 0x1c, 0x46, 0x92, 0x2e, 0x0b, 0x0b, 0x1d, 0x61, 0x80, 0x1d, 0x26, 0x87, 0x0b,
0x2b, 0x0b, 0x10, 0x05, 0x67, 0x61, 0x22, 0x1c, 0x46, 0x68, 0x2e, 0x3c, 0x27, 0x3c, 0x27, 0x53,
0x2e, 0x58, 0x09, 0x9c, 0x82, 0x27, 0x0a, 0x43, 0x53, 0x27, 0x3c, 0x27, 0x3c, 0x4d, 0x93, 0x20,
0x61, 0x22, 0x10, 0x04, 0x67, 0x6a, 0x78, 0x78, 0x78, 0x10, 0x05, 0x2d, 0x0a, 0x3f, 0x27, 0x70,
0x27, 0x55, 0x27, 0x53, 0x27, 0x3c, 0x1a, 0x1f, 0x27, 0x26, 0x87, 0x0d, 0x05, 0x2e, 0x3c, 0x27,
0x53, 0x27, 0x55, 0x27, 0x70, 0x2e, 0x0a, 0x0e, 0x04, 0x10, 0x08, 0x24, 0x75, 0x9c, 0x73, 0x06,
0x50, 0x07, 0x21, 0x05, 0x06, 0x01, 0x56, 0x73, 0x03, 0x18, 0x46, 0x10,
};
static const uint16_t mf_rlefont_arial14_glyph_offsets_0[95] = {
0x0000, 0x0003, 0x0018, 0x002a, 0x0058, 0x008f, 0x00d3, 0x010a,
0x0115, 0x0136, 0x0152, 0x0162, 0x0175, 0x017c, 0x0183, 0x0189,
0x01a1, 0x01cd, 0x01e0, 0x01fb, 0x021e, 0x0241, 0x0264, 0x0290,
0x02a8, 0x02d9, 0x0304, 0x0307, 0x030b, 0x0325, 0x0331, 0x034a,
0x035e, 0x03c7, 0x03f5, 0x0421, 0x0452, 0x047c, 0x048f, 0x04a2,
0x04d6, 0x04f0, 0x04f6, 0x050d, 0x053a, 0x0548, 0x0586, 0x05b7,
0x05ef, 0x0612, 0x0652, 0x067c, 0x06b1, 0x06be, 0x06dc, 0x0709,
0x0754, 0x0784, 0x07ab, 0x07cb, 0x07d6, 0x07ed, 0x0801, 0x0817,
0x081f, 0x0827, 0x0853, 0x0876, 0x0891, 0x08b6, 0x08d6, 0x08ed,
0x091b, 0x0931, 0x093b, 0x0948, 0x096a, 0x0975, 0x099b, 0x09ba,
0x09de, 0x0a01, 0x0a29, 0x0a3c, 0x0a5d, 0x0a78, 0x0a8c, 0x0aac,
0x0ae9, 0x0b0d, 0x0b38, 0x0b53, 0x0b73, 0x0b7a, 0x0b9a,
};
static const struct mf_rlefont_char_range_s mf_rlefont_arial14_char_ranges[] = {
{32, 95, mf_rlefont_arial14_glyph_offsets_0, mf_rlefont_arial14_glyph_data_0},
};
const struct mf_rlefont_s mf_rlefont_arial14 = {
{
"Arial Regular 14",
"arial__14_arial14_aa",
15, /* width */
14, /* height */
3, /* min x advance */
14, /* max x advance */
1, /* baseline x */
11, /* baseline y */
16, /* line height */
0, /* flags */
63, /* fallback character */
&mf_rlefont_character_width,
&mf_rlefont_render_character,
},
4, /* version */
mf_rlefont_arial14_dictionary_data,
mf_rlefont_arial14_dictionary_offsets,
96, /* rle dict count */
147, /* total dict count */
1, /* char range count */
mf_rlefont_arial14_char_ranges,
};
#ifdef MF_INCLUDED_FONTS
/* List entry for searching fonts by name. */
static const struct mf_font_list_s mf_rlefont_arial14_listentry = {
MF_INCLUDED_FONTS,
(struct mf_font_s*)&mf_rlefont_arial14
};
#undef MF_INCLUDED_FONTS
#define MF_INCLUDED_FONTS (&mf_rlefont_arial14_listentry)
#endif
/* End of automatically generated font definition for arial14. */

877
resources/token.h Normal file
View File

@ -0,0 +1,877 @@
/**
* File generated by the uGFX-Sudio
*
* Original image file: C:/test_joel/studio/tokenring/resources/token.bmp
*/
static const char token[] = {
0x42, 0x4D, 0xE8, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x02, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00,
0x00, 0x00, 0x9A, 0x33, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x86, 0x00,
0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x96, 0x96, 0x96, 0x00, 0x50, 0x59, 0x57, 0x00, 0xBA, 0xC7,
0xC8, 0x00, 0xE5, 0xE5, 0xE5, 0x00, 0xC5, 0xD6, 0xD6, 0x00, 0xD9, 0xD9, 0xD9, 0x00, 0x87, 0x88,
0x88, 0x00, 0x99, 0x26, 0x00, 0x00, 0x6B, 0x6B, 0xD9, 0x00, 0xD7, 0x62, 0x3A, 0x00, 0x60, 0x63,
0x63, 0x00, 0xAA, 0xE9, 0xAA, 0x00, 0xA3, 0xA3, 0xA3, 0x00, 0x79, 0x7B, 0x7A, 0x00, 0x42, 0x46,
0x44, 0x00, 0x6E, 0xDA, 0x6E, 0x00, 0xCB, 0xF2, 0xCB, 0x00, 0x3B, 0xB1, 0xFF, 0x00, 0x6E, 0x77,
0x77, 0x00, 0xAB, 0xAB, 0xE9, 0x00, 0x7C, 0xCB, 0xFF, 0x00, 0x9D, 0xA2, 0xA3, 0x00, 0xE4, 0x95,
0x7A, 0x00, 0x97, 0x97, 0xE4, 0x00, 0x37, 0x3A, 0x3A, 0x00, 0xF3, 0xF3, 0xF3, 0x00, 0x98, 0xE5,
0x98, 0x00, 0x00, 0x72, 0xBF, 0x00, 0xD2, 0xE4, 0xE5, 0x00, 0x95, 0xD4, 0xFF, 0x00, 0xCB, 0xCB,
0xCB, 0x00, 0xA3, 0xB2, 0xB3, 0x00, 0x6E, 0x6E, 0x6E, 0x00, 0x7E, 0x83, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0xAC, 0xB6, 0xB6, 0x00, 0xDD, 0x79, 0x58, 0x00, 0x54, 0x54, 0xD4, 0x00, 0xEA, 0xAF,
0x9B, 0x00, 0xB3, 0xBE, 0xBF, 0x00, 0xB0, 0xB0, 0xB0, 0x00, 0xD0, 0x53, 0x53, 0x00, 0x8A, 0x97,
0x96, 0x00, 0x54, 0xD4, 0x54, 0x00, 0x59, 0xBC, 0xFF, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xAC, 0xBC,
0xBC, 0x00, 0x9B, 0x4F, 0x3C, 0x00, 0xDA, 0xEE, 0xEF, 0x00, 0xA1, 0xB0, 0xAF, 0x00, 0xCA, 0xDB,
0xDC, 0x00, 0x9F, 0x83, 0x78, 0x00, 0x92, 0x74, 0x68, 0x00, 0xFB, 0xFB, 0xFB, 0x00, 0xCF, 0xCF,
0xCF, 0x00, 0xBD, 0xBD, 0xBD, 0x00, 0x2B, 0x2B, 0x2B, 0x00, 0x96, 0xA3, 0xA3, 0x00, 0xD6, 0xE9,
0xEA, 0x00, 0x67, 0x6A, 0x69, 0x00, 0xF5, 0x62, 0x62, 0x00, 0x9F, 0xAA, 0xAA, 0x00, 0xCF, 0xB0,
0xB0, 0x00, 0x5C, 0x65, 0x64, 0x00, 0xD2, 0x6E, 0x6E, 0x00, 0xE6, 0x5B, 0x5B, 0x00, 0xCE, 0xDF,
0xE0, 0x00, 0x52, 0x53, 0x53, 0x00, 0xC1, 0xCF, 0xD0, 0x00, 0x14, 0x14, 0x14, 0x00, 0x2D, 0x31,
0x2F, 0x00, 0x7C, 0x85, 0x85, 0x00, 0x40, 0x41, 0x40, 0x00, 0x89, 0x8F, 0x8F, 0x00, 0x5A, 0x5E,
0x5D, 0x00, 0x23, 0x28, 0x25, 0x00, 0x7E, 0x8B, 0x8A, 0x00, 0xFF, 0x8C, 0x8C, 0x00, 0xFF, 0xD9,
0xD9, 0x00, 0xFF, 0xB3, 0xB3, 0x00, 0xFF, 0x70, 0x70, 0x00, 0xFF, 0xF6, 0xF6, 0x00, 0xFF, 0xC6,
0xC6, 0x00, 0xFF, 0xEC, 0xEC, 0x00, 0x79, 0x83, 0xAA, 0x00, 0x79, 0xAA, 0x84, 0x00, 0xFF, 0x79,
0x79, 0x00, 0xFF, 0xE3, 0xE3, 0x00, 0xFF, 0xA0, 0xA0, 0x00, 0xFF, 0x83, 0x83, 0x00, 0xFF, 0xA9,
0xA9, 0x00, 0x36, 0x88, 0xBB, 0x00, 0xFF, 0xD0, 0xD0, 0x00, 0xFF, 0x96, 0x96, 0x00, 0xFF, 0xBC,
0xBC, 0x00, 0xCA, 0xCA, 0xF2, 0x00, 0xBF, 0xE5, 0xFF, 0x00, 0xF2, 0xCC, 0xBF, 0x00, 0xCF, 0xE2,
0xE3, 0x00, 0xFB, 0xF2, 0xEF, 0x00, 0x0F, 0x9F, 0xFF, 0x00, 0xF2, 0xF2, 0xFB, 0x00, 0x3F, 0x3F,
0xCF, 0x00, 0xEF, 0xF8, 0xFF, 0x00, 0x1F, 0xA5, 0xFF, 0x00, 0xD1, 0x47, 0x18, 0x00, 0xF8, 0xE5,
0xDF, 0x00, 0xF2, 0xFB, 0xF2, 0x00, 0x39, 0x40, 0x3E, 0x00, 0xDF, 0xF2, 0xFF, 0x00, 0xF5, 0xD8,
0xCF, 0x00, 0x3F, 0xCF, 0x3F, 0x00, 0xAF, 0xDF, 0xFF, 0x00, 0x32, 0x34, 0x33, 0x00, 0xD8, 0xD8,
0xF5, 0x00, 0x9C, 0xA7, 0xA7, 0x00, 0xCF, 0xEB, 0xFF, 0x00, 0x48, 0x4E, 0x4B, 0x00, 0xE5, 0xE5,
0xF8, 0x00, 0xEF, 0xBF, 0xAF, 0x00, 0x69, 0x72, 0x71, 0x00, 0xE5, 0xF8, 0xE5, 0x00, 0x73, 0x7E,
0x7D, 0x00, 0xA6, 0xB5, 0xC0, 0x00, 0xCF, 0x91, 0x91, 0x00, 0xA6, 0xBF, 0xB6, 0x00, 0x5F, 0x8E,
0xA8, 0x00, 0xF0, 0x7B, 0x7B, 0x00, 0xCC, 0x33, 0x00, 0x00, 0x33, 0x33, 0xCC, 0x00, 0x00, 0x99,
0xFF, 0x00, 0x33, 0xCC, 0x33, 0x00, 0xFF, 0x66, 0x66, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x76, 0x22,
0x01, 0x05, 0x3C, 0x4A, 0x01, 0x1E, 0x78, 0x22, 0x00, 0x00, 0x75, 0x22, 0x01, 0x1E, 0x3E, 0x4B,
0x01, 0x1E, 0x77, 0x22, 0x00, 0x00, 0x75, 0x22, 0x00, 0x03, 0x00, 0x4B, 0x3B, 0x00, 0x3A, 0x21,
0x00, 0x03, 0x0A, 0x4B, 0x3B, 0x00, 0x77, 0x22, 0x00, 0x00, 0x75, 0x22, 0x00, 0x04, 0x00, 0x4B,
0x2E, 0x2E, 0x05, 0x4C, 0x01, 0x39, 0x01, 0x2E, 0x18, 0x4C, 0x01, 0x39, 0x01, 0x31, 0x04, 0x4C,
0x01, 0x2A, 0x01, 0x31, 0x07, 0x4C, 0x01, 0x31, 0x01, 0x39, 0x09, 0x4C, 0x00, 0x03, 0x2E, 0x3F,
0x4A, 0x00, 0x77, 0x22, 0x00, 0x00, 0x75, 0x22, 0x00, 0x05, 0x03, 0x4B, 0x31, 0x30, 0x01, 0x00,
0x04, 0x21, 0x00, 0x03, 0x4C, 0x30, 0x43, 0x00, 0x17, 0x21, 0x00, 0x09, 0x4C, 0x2E, 0x3B, 0x21,
0x21, 0x21, 0x78, 0x2E, 0x3B, 0x00, 0x05, 0x21, 0x00, 0x03, 0x3B, 0x2E, 0x78, 0x00, 0x08, 0x21,
0x00, 0x04, 0x43, 0x30, 0x01, 0x0D, 0x77, 0x22, 0x00, 0x00, 0x76, 0x22, 0x00, 0x0F, 0x75, 0x78,
0x30, 0x7A, 0x02, 0x02, 0x02, 0x27, 0x3B, 0x0A, 0x7A, 0x02, 0x02, 0x02, 0x23, 0x00, 0x0F, 0x02,
0x00, 0x21, 0x27, 0x02, 0x02, 0x02, 0x0A, 0x0A, 0x2A, 0x02, 0x02, 0x02, 0x7A, 0x4C, 0x31, 0x02,
0x3D, 0x02, 0x23, 0x02, 0x39, 0x2E, 0x12, 0x02, 0x02, 0x02, 0x27, 0x27, 0x02, 0x23, 0x02, 0x47,
0x30, 0x71, 0x00, 0x00, 0x77, 0x22, 0x00, 0x00, 0x76, 0x22, 0x00, 0x3F, 0x15, 0x4B, 0x62, 0x02,
0x02, 0x30, 0x30, 0x1C, 0x02, 0x15, 0x1F, 0x3A, 0x30, 0x42, 0x44, 0x42, 0x30, 0x30, 0x1C, 0x30,
0x1C, 0x30, 0x30, 0x1C, 0x30, 0x1C, 0x30, 0x1C, 0x30, 0x30, 0x04, 0x30, 0x1C, 0x30, 0x1F, 0x27,
0x44, 0x30, 0x30, 0x30, 0x4C, 0x62, 0x2A, 0x2E, 0x2A, 0x30, 0x3D, 0x2E, 0x39, 0x62, 0x12, 0x30,
0x1C, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x2A, 0x62, 0x4B, 0x1E, 0x00, 0x77, 0x22, 0x00, 0x00,
0x76, 0x22, 0x00, 0x24, 0x03, 0x4B, 0x39, 0x30, 0x2A, 0x30, 0x30, 0x3A, 0x32, 0x23, 0x23, 0x04,
0x30, 0x44, 0x3A, 0x44, 0x32, 0x30, 0x02, 0x1C, 0x44, 0x1C, 0x30, 0x44, 0x3A, 0x44, 0x1C, 0x04,
0x04, 0x30, 0x44, 0x1C, 0x44, 0x1C, 0x1C, 0x04, 0x04, 0x30, 0x00, 0x17, 0x4C, 0x4C, 0x0A, 0x0A,
0x47, 0x32, 0x21, 0x0A, 0x0E, 0x30, 0x12, 0x30, 0x02, 0x30, 0x32, 0x42, 0x30, 0x02, 0x30, 0x39,
0x2E, 0x4B, 0x05, 0x00, 0x77, 0x22, 0x00, 0x00, 0x77, 0x22, 0x00, 0x23, 0x3B, 0x3F, 0x30, 0x39,
0x30, 0x30, 0x3A, 0x1F, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x04, 0x30, 0x04, 0x1C, 0x30, 0x44, 0x30,
0x44, 0x30, 0x1C, 0x04, 0x30, 0x04, 0x30, 0x44, 0x30, 0x30, 0x44, 0x30, 0x44, 0x30, 0x04, 0x00,
0x04, 0x30, 0x00, 0x16, 0x4C, 0x4C, 0x1F, 0x23, 0x3D, 0x23, 0x3D, 0x23, 0x78, 0x30, 0x3B, 0x30,
0x02, 0x30, 0x32, 0x30, 0x42, 0x44, 0x30, 0x39, 0x2A, 0x4B, 0x78, 0x22, 0x00, 0x00, 0x77, 0x22,
0x00, 0x3D, 0x28, 0x4B, 0x04, 0x31, 0x02, 0x30, 0x1C, 0x42, 0x32, 0x3A, 0x44, 0x42, 0x42, 0x42,
0x30, 0x44, 0x1C, 0x44, 0x42, 0x30, 0x44, 0x3A, 0x44, 0x1C, 0x44, 0x32, 0x42, 0x44, 0x3A, 0x44,
0x1C, 0x44, 0x42, 0x30, 0x02, 0x3A, 0x42, 0x30, 0x30, 0x4C, 0x4C, 0x32, 0x30, 0x02, 0x30, 0x02,
0x30, 0x31, 0x30, 0x78, 0x30, 0x2E, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x39, 0x7A, 0x4A, 0x00,
0x78, 0x22, 0x00, 0x00, 0x78, 0x22, 0x00, 0x3C, 0x4B, 0x2A, 0x30, 0x7A, 0x62, 0x2A, 0x2E, 0x39,
0x2A, 0x04, 0x3D, 0x62, 0x3D, 0x42, 0x62, 0x3D, 0x62, 0x3D, 0x02, 0x1F, 0x02, 0x62, 0x73, 0x62,
0x49, 0x62, 0x02, 0x02, 0x02, 0x47, 0x62, 0x78, 0x62, 0x2E, 0x2E, 0x62, 0x62, 0x62, 0x47, 0x4C,
0x2A, 0x2E, 0x7A, 0x2E, 0x7A, 0x2E, 0x2A, 0x30, 0x39, 0x2E, 0x7A, 0x2E, 0x12, 0x2E, 0x39, 0x39,
0x31, 0x04, 0x01, 0x0D, 0x78, 0x22, 0x00, 0x00, 0x78, 0x22, 0x00, 0x2F, 0x0D, 0x75, 0x30, 0x21,
0x04, 0x3D, 0x2E, 0x30, 0x04, 0x47, 0x04, 0x2A, 0x04, 0x31, 0x04, 0x04, 0x39, 0x04, 0x4A, 0x3F,
0x04, 0x49, 0x04, 0x27, 0x27, 0x04, 0x39, 0x04, 0x3B, 0x12, 0x04, 0x39, 0x04, 0x27, 0x2E, 0x04,
0x39, 0x04, 0x47, 0x4C, 0x27, 0x27, 0x39, 0x04, 0x2A, 0x04, 0x47, 0x00, 0x0B, 0x30, 0x01, 0x71,
0x01, 0x00, 0x78, 0x22, 0x00, 0x00, 0x78, 0x22, 0x00, 0x2F, 0x1E, 0x71, 0x4B, 0x71, 0x4C, 0x78,
0x4B, 0x4B, 0x4B, 0x01, 0x4C, 0x6C, 0x4C, 0x78, 0x78, 0x4C, 0x75, 0x4C, 0x01, 0x6C, 0x4C, 0x01,
0x7A, 0x78, 0x01, 0x4C, 0x6C, 0x4C, 0x01, 0x6C, 0x4C, 0x01, 0x4C, 0x78, 0x78, 0x4C, 0x01, 0x4C,
0x6C, 0x4B, 0x78, 0x4C, 0x01, 0x4C, 0x01, 0x4C, 0x6C, 0x00, 0x0B, 0x4B, 0x01, 0x46, 0x01, 0x03,
0x78, 0x22, 0x00, 0x00, 0x79, 0x22, 0x00, 0x0B, 0x03, 0x00, 0x12, 0x43, 0x43, 0x0D, 0x0D, 0x0D,
0x4A, 0x43, 0x4A, 0x00, 0x05, 0x43, 0x00, 0x03, 0x4B, 0x75, 0x4A, 0x00, 0x08, 0x75, 0x01, 0x01,
0x01, 0x4A, 0x08, 0x75, 0x00, 0x03, 0x01, 0x4B, 0x0E, 0x00, 0x05, 0x43, 0x01, 0x0A, 0x0B, 0x0D,
0x01, 0x36, 0x79, 0x22, 0x00, 0x00, 0x88, 0x22, 0x01, 0x05, 0x01, 0x46, 0x15, 0x27, 0x01, 0x75,
0x01, 0x28, 0x8B, 0x22, 0x00, 0x00, 0x7D, 0x22, 0x01, 0x15, 0x01, 0x45, 0x2C, 0x22, 0x01, 0x20,
0x80, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x01, 0x2B, 0x1F, 0x00, 0x03, 0x12, 0x22, 0x1E, 0x00,
0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x44, 0x29, 0x1F, 0x00, 0x05, 0x44, 0x30,
0x22, 0x00, 0x05, 0x00, 0x7E, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x29, 0x83,
0x00, 0x05, 0x55, 0x30, 0x22, 0x15, 0x36, 0x00, 0x7E, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F,
0x01, 0x55, 0x29, 0x83, 0x00, 0x05, 0x55, 0x30, 0x22, 0x00, 0x36, 0x00, 0x7E, 0x22, 0x00, 0x00,
0x7E, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x29, 0x83, 0x00, 0x05, 0x55, 0x30, 0x22, 0x15, 0x44, 0x00,
0x7E, 0x22, 0x00, 0x00, 0x77, 0x22, 0x00, 0x09, 0x4E, 0x5C, 0x4F, 0x58, 0x4D, 0x56, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x01, 0x10, 0x07, 0x85, 0x00, 0x03, 0x6B, 0x10, 0x0F, 0x00, 0x10, 0x83,
0x00, 0x09, 0x55, 0x30, 0x22, 0x2F, 0x40, 0x58, 0x4F, 0x4E, 0x57, 0x00, 0x7A, 0x22, 0x00, 0x00,
0x71, 0x22, 0x00, 0x05, 0x4E, 0x5E, 0x5A, 0x4D, 0x50, 0x00, 0x07, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x01, 0x10, 0x0A, 0x85, 0x01, 0x0B, 0x0F, 0x83, 0x00, 0x06, 0x55, 0x30,
0x22, 0x2F, 0x29, 0x41, 0x04, 0x84, 0x00, 0x05, 0x56, 0x4D, 0x4F, 0x52, 0x57, 0x00, 0x74, 0x22,
0x00, 0x00, 0x6C, 0x22, 0x00, 0x04, 0x4E, 0x4F, 0x5D, 0x56, 0x0D, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x00, 0x07, 0x10, 0x85, 0x85, 0x85, 0x79, 0x10, 0x10, 0x00, 0x05, 0x85,
0x01, 0x0F, 0x0E, 0x83, 0x00, 0x06, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x0A, 0x84, 0x00, 0x04,
0x4D, 0x58, 0x5E, 0x57, 0x6F, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, 0x03, 0x52, 0x58, 0x59, 0x00,
0x12, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x0D, 0x10, 0x85, 0x85, 0x85,
0x1A, 0x83, 0x83, 0x2B, 0x10, 0x85, 0x85, 0x85, 0x79, 0x00, 0x0E, 0x83, 0x00, 0x06, 0x55, 0x30,
0x22, 0x2F, 0x29, 0x29, 0x0F, 0x84, 0x00, 0x03, 0x4D, 0x4F, 0x5C, 0x00, 0x6B, 0x22, 0x00, 0x00,
0x64, 0x22, 0x00, 0x03, 0x52, 0x58, 0x56, 0x00, 0x16, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00,
0x0E, 0x83, 0x00, 0x09, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x83, 0x83, 0x2B, 0x00, 0x04, 0x85,
0x01, 0x0F, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x3C, 0x00, 0x12, 0x84,
0x00, 0x03, 0x59, 0x5A, 0x5C, 0x00, 0x67, 0x22, 0x00, 0x00, 0x60, 0x22, 0x00, 0x03, 0x5C, 0x5A,
0x56, 0x00, 0x1A, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85,
0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x0D, 0x83,
0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x41, 0x00, 0x16, 0x84, 0x00, 0x03, 0x59, 0x4F,
0x57, 0x00, 0x63, 0x22, 0x00, 0x00, 0x5D, 0x22, 0x01, 0x5E, 0x01, 0x5D, 0x1E, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83,
0x00, 0x05, 0x0B, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x41, 0x00, 0x19, 0x84, 0x00, 0x03, 0x50, 0x58, 0x5C, 0x00, 0x60, 0x22, 0x00, 0x00,
0x5A, 0x22, 0x01, 0x5E, 0x01, 0x59, 0x21, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83,
0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85,
0x10, 0x00, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x00, 0x1D, 0x84,
0x01, 0x5D, 0x01, 0x52, 0x5D, 0x22, 0x00, 0x00, 0x57, 0x22, 0x01, 0x5E, 0x01, 0x59, 0x24, 0x84,
0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00,
0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30,
0x22, 0x2F, 0x29, 0x29, 0x29, 0x00, 0x20, 0x84, 0x01, 0x5D, 0x01, 0x52, 0x5A, 0x22, 0x00, 0x00,
0x54, 0x22, 0x01, 0x52, 0x01, 0x4D, 0x27, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83,
0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85,
0x10, 0x00, 0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x21, 0x84,
0x00, 0x03, 0x50, 0x58, 0x5C, 0x00, 0x57, 0x22, 0x00, 0x00, 0x51, 0x22, 0x00, 0x03, 0x4E, 0x58,
0x50, 0x00, 0x29, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85,
0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83,
0x00, 0x08, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x24, 0x84, 0x01, 0x56, 0x01, 0x4F,
0x55, 0x22, 0x00, 0x00, 0x4F, 0x22, 0x01, 0x5E, 0x01, 0x56, 0x2C, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05,
0x10, 0x85, 0x85, 0x85, 0x0B, 0x00, 0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29,
0x29, 0x41, 0x27, 0x84, 0x01, 0x5D, 0x01, 0x5C, 0x52, 0x22, 0x00, 0x00, 0x4D, 0x22, 0x01, 0x58,
0x01, 0x50, 0x2E, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x09, 0x10, 0x85,
0x85, 0x85, 0x1A, 0x83, 0x83, 0x83, 0x6F, 0x00, 0x04, 0x85, 0x01, 0x1A, 0x0D, 0x83, 0x00, 0x08,
0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x41, 0x29, 0x84, 0x01, 0x56, 0x01, 0x4F, 0x50, 0x22,
0x00, 0x00, 0x4A, 0x22, 0x01, 0x4E, 0x01, 0x4D, 0x2C, 0x84, 0x00, 0x08, 0x59, 0x5D, 0x4F, 0x52,
0x4E, 0x22, 0x1F, 0x55, 0x0E, 0x83, 0x00, 0x09, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x83, 0x83,
0x0B, 0x00, 0x04, 0x85, 0x01, 0x2B, 0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x33, 0x7C, 0x7C,
0x40, 0x40, 0x2B, 0x84, 0x01, 0x50, 0x01, 0x58, 0x4E, 0x22, 0x00, 0x00, 0x48, 0x22, 0x01, 0x52,
0x01, 0x59, 0x28, 0x84, 0x00, 0x04, 0x59, 0x5D, 0x4F, 0x4E, 0x08, 0x22, 0x01, 0x1F, 0x01, 0x55,
0x0E, 0x83, 0x00, 0x08, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x2B, 0x0B, 0x04, 0x85, 0x01, 0x0B,
0x0E, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x15, 0x05, 0x22, 0x00, 0x05, 0x4E, 0x52, 0x4F, 0x4D,
0x50, 0x00, 0x28, 0x84, 0x01, 0x58, 0x01, 0x57, 0x4B, 0x22, 0x00, 0x00, 0x46, 0x22, 0x01, 0x52,
0x01, 0x56, 0x25, 0x84, 0x00, 0x04, 0x56, 0x5D, 0x5E, 0x4E, 0x0D, 0x22, 0x01, 0x1F, 0x01, 0x55,
0x0E, 0x83, 0x01, 0x10, 0x0A, 0x85, 0x01, 0x6B, 0x01, 0x2B, 0x0E, 0x83, 0x00, 0x04, 0x55, 0x30,
0x22, 0x00, 0x0B, 0x22, 0x00, 0x04, 0x5C, 0x4F, 0x4D, 0x50, 0x25, 0x84, 0x01, 0x4D, 0x01, 0x4E,
0x49, 0x22, 0x00, 0x00, 0x44, 0x22, 0x01, 0x52, 0x01, 0x56, 0x23, 0x84, 0x00, 0x03, 0x59, 0x5A,
0x5C, 0x00, 0x12, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x0E, 0x83, 0x01, 0x10, 0x09, 0x85, 0x01, 0x79,
0x01, 0x2B, 0x0F, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x00, 0x0F, 0x22, 0x00, 0x04, 0x57, 0x5E,
0x58, 0x56, 0x23, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x47, 0x22, 0x00, 0x00, 0x42, 0x22, 0x01, 0x5C,
0x01, 0x56, 0x21, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x5C, 0x00, 0x16, 0x22, 0x01, 0x1F, 0x01, 0x55,
0x0E, 0x83, 0x01, 0x0B, 0x07, 0x10, 0x01, 0x0B, 0x01, 0x0F, 0x11, 0x83, 0x00, 0x04, 0x55, 0x30,
0x22, 0x15, 0x14, 0x22, 0x00, 0x03, 0x52, 0x5D, 0x50, 0x00, 0x21, 0x84, 0x01, 0x5D, 0x46, 0x22,
0x00, 0x00, 0x40, 0x22, 0x01, 0x4E, 0x01, 0x4D, 0x20, 0x84, 0x01, 0x5D, 0x01, 0x5E, 0x1A, 0x22,
0x01, 0x1F, 0x01, 0x55, 0x29, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x00, 0x17, 0x22, 0x00, 0x03,
0x57, 0x4F, 0x59, 0x00, 0x20, 0x84, 0x01, 0x58, 0x44, 0x22, 0x00, 0x00, 0x3F, 0x22, 0x01, 0x58,
0x1E, 0x84, 0x00, 0x03, 0x50, 0x58, 0x5C, 0x00, 0x1D, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x29, 0x83,
0x00, 0x04, 0x55, 0x30, 0x22, 0x00, 0x1B, 0x22, 0x01, 0x5E, 0x01, 0x5D, 0x1E, 0x84, 0x01, 0x50,
0x01, 0x4F, 0x42, 0x22, 0x00, 0x00, 0x3D, 0x22, 0x01, 0x4F, 0x01, 0x50, 0x1C, 0x84, 0x00, 0x03,
0x50, 0x58, 0x5C, 0x00, 0x20, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x04, 0x83, 0x04, 0x10, 0x00, 0x1D,
0x6F, 0x83, 0x10, 0x0B, 0x83, 0x10, 0x0F, 0x83, 0x6F, 0x10, 0x1A, 0x83, 0x10, 0x0F, 0x83, 0x0F,
0x10, 0x2B, 0x6F, 0x0B, 0x6B, 0x10, 0x0F, 0x83, 0x10, 0x2B, 0x83, 0x2B, 0x10, 0x00, 0x04, 0x83,
0x00, 0x04, 0x55, 0x30, 0x22, 0x15, 0x1E, 0x22, 0x01, 0x52, 0x01, 0x5D, 0x1D, 0x84, 0x01, 0x56,
0x01, 0x4E, 0x40, 0x22, 0x00, 0x00, 0x3B, 0x22, 0x01, 0x4E, 0x01, 0x56, 0x1C, 0x84, 0x01, 0x5D,
0x01, 0x52, 0x23, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x04, 0x83, 0x00, 0x21, 0x1A, 0x2B, 0x1A, 0x85,
0x0B, 0x83, 0x85, 0x10, 0x83, 0x10, 0x79, 0x1A, 0x0B, 0x85, 0x0F, 0x83, 0x85, 0x1A, 0x83, 0x1A,
0x85, 0x2B, 0x10, 0x6B, 0x0F, 0x10, 0x85, 0x6F, 0x85, 0x0F, 0x2B, 0x6B, 0x85, 0x00, 0x04, 0x83,
0x00, 0x04, 0x55, 0x30, 0x22, 0x00, 0x21, 0x22, 0x01, 0x5E, 0x01, 0x59, 0x1C, 0x84, 0x01, 0x5D,
0x3F, 0x22, 0x00, 0x00, 0x3A, 0x22, 0x01, 0x58, 0x1B, 0x84, 0x01, 0x56, 0x01, 0x5E, 0x26, 0x22,
0x01, 0x1F, 0x01, 0x55, 0x05, 0x83, 0x00, 0x20, 0x0F, 0x10, 0x85, 0x0B, 0x83, 0x85, 0x10, 0x83,
0x0F, 0x85, 0x10, 0x85, 0x6B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F, 0x6B, 0x10, 0x83,
0x0F, 0x85, 0x1A, 0x85, 0x0F, 0x79, 0x85, 0x85, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D,
0x23, 0x22, 0x00, 0x03, 0x57, 0x5A, 0x50, 0x00, 0x1A, 0x84, 0x01, 0x50, 0x01, 0x5E, 0x3D, 0x22,
0x00, 0x00, 0x38, 0x22, 0x01, 0x5C, 0x01, 0x50, 0x1A, 0x84, 0x01, 0x58, 0x01, 0x4E, 0x28, 0x22,
0x01, 0x1F, 0x01, 0x55, 0x04, 0x83, 0x00, 0x21, 0x1A, 0x85, 0x85, 0x10, 0x6F, 0x83, 0x85, 0x10,
0x83, 0x83, 0x6B, 0x0B, 0x85, 0x0B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F, 0x85, 0x10,
0x83, 0x0F, 0x85, 0x1A, 0x85, 0x6B, 0x85, 0x1A, 0x85, 0x00, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30,
0x22, 0x2D, 0x26, 0x22, 0x01, 0x52, 0x01, 0x4D, 0x1A, 0x84, 0x01, 0x4D, 0x01, 0x57, 0x3B, 0x22,
0x00, 0x00, 0x37, 0x22, 0x01, 0x5D, 0x19, 0x84, 0x01, 0x56, 0x01, 0x4F, 0x2B, 0x22, 0x01, 0x1F,
0x01, 0x55, 0x04, 0x83, 0x00, 0x21, 0x10, 0x85, 0x6F, 0x83, 0x6F, 0x83, 0x85, 0x10, 0x83, 0x83,
0x0B, 0x85, 0x85, 0x2B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F, 0x10, 0x79, 0x83, 0x0F,
0x85, 0x2B, 0x85, 0x85, 0x0F, 0x0F, 0x85, 0x00, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D,
0x28, 0x22, 0x01, 0x57, 0x01, 0x58, 0x19, 0x84, 0x01, 0x50, 0x01, 0x5E, 0x3A, 0x22, 0x00, 0x00,
0x35, 0x22, 0x01, 0x4E, 0x01, 0x50, 0x18, 0x84, 0x01, 0x56, 0x01, 0x52, 0x2D, 0x22, 0x01, 0x1F,
0x01, 0x55, 0x04, 0x83, 0x00, 0x05, 0x0F, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x85, 0x00, 0x06,
0x83, 0x2B, 0x85, 0x10, 0x83, 0x1A, 0x04, 0x85, 0x00, 0x0E, 0x1A, 0x85, 0x0F, 0x2B, 0x6B, 0x85,
0x85, 0x0B, 0x83, 0x85, 0x1A, 0x83, 0x0F, 0x85, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D,
0x2B, 0x22, 0x01, 0x4F, 0x01, 0x50, 0x18, 0x84, 0x01, 0x4D, 0x39, 0x22, 0x00, 0x00, 0x34, 0x22,
0x01, 0x5A, 0x18, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x2F, 0x22, 0x01, 0x1F, 0x01, 0x55, 0x05, 0x83,
0x00, 0x03, 0x6F, 0x0F, 0x2B, 0x00, 0x14, 0x83, 0x01, 0x0F, 0x01, 0x2B, 0x0B, 0x83, 0x00, 0x04,
0x55, 0x30, 0x22, 0x2D, 0x2D, 0x22, 0x01, 0x52, 0x01, 0x56, 0x17, 0x84, 0x01, 0x50, 0x01, 0x5C,
0x37, 0x22, 0x00, 0x00, 0x33, 0x22, 0x01, 0x59, 0x17, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x31, 0x22,
0x01, 0x1F, 0x01, 0x55, 0x29, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D, 0x2F, 0x22, 0x01, 0x52,
0x01, 0x56, 0x17, 0x84, 0x01, 0x5A, 0x36, 0x22, 0x00, 0x00, 0x31, 0x22, 0x01, 0x4E, 0x01, 0x50,
0x16, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x33, 0x22, 0x01, 0x1F, 0x01, 0x7D, 0x29, 0x55, 0x00, 0x04,
0x7D, 0x30, 0x22, 0x2D, 0x31, 0x22, 0x01, 0x52, 0x01, 0x50, 0x16, 0x84, 0x01, 0x59, 0x35, 0x22,
0x00, 0x00, 0x30, 0x22, 0x01, 0x5E, 0x16, 0x84, 0x01, 0x56, 0x01, 0x5C, 0x35, 0x22, 0x01, 0x39,
0x2B, 0x30, 0x00, 0x03, 0x1F, 0x22, 0x2D, 0x00, 0x33, 0x22, 0x01, 0x4F, 0x01, 0x50, 0x15, 0x84,
0x01, 0x50, 0x01, 0x57, 0x33, 0x22, 0x00, 0x00, 0x2F, 0x22, 0x01, 0x58, 0x15, 0x84, 0x01, 0x50,
0x01, 0x5E, 0x36, 0x22, 0x01, 0x48, 0x2D, 0x22, 0x01, 0x46, 0x36, 0x22, 0x01, 0x58, 0x16, 0x84,
0x01, 0x52, 0x32, 0x22, 0x00, 0x00, 0x2E, 0x22, 0x01, 0x59, 0x15, 0x84, 0x01, 0x5A, 0x39, 0x22,
0x2D, 0x2D, 0x38, 0x22, 0x01, 0x57, 0x01, 0x4D, 0x15, 0x84, 0x01, 0x5A, 0x31, 0x22, 0x00, 0x00,
0x2C, 0x22, 0x01, 0x57, 0x01, 0x59, 0x14, 0x84, 0x01, 0x59, 0x01, 0x57, 0xA1, 0x22, 0x01, 0x52,
0x01, 0x50, 0x14, 0x84, 0x01, 0x58, 0x30, 0x22, 0x00, 0x00, 0x2B, 0x22, 0x01, 0x57, 0x01, 0x50,
0x13, 0x84, 0x01, 0x50, 0x01, 0x5E, 0xA5, 0x22, 0x01, 0x5D, 0x14, 0x84, 0x01, 0x59, 0x2F, 0x22,
0x00, 0x00, 0x2A, 0x22, 0x01, 0x57, 0x01, 0x50, 0x13, 0x84, 0x01, 0x4D, 0xA8, 0x22, 0x01, 0x4E,
0x01, 0x56, 0x13, 0x84, 0x01, 0x59, 0x2E, 0x22, 0x00, 0x00, 0x29, 0x22, 0x01, 0x57, 0x01, 0x50,
0x12, 0x84, 0x01, 0x50, 0x01, 0x5E, 0xAB, 0x22, 0x01, 0x5D, 0x13, 0x84, 0x01, 0x59, 0x2D, 0x22,
0x00, 0x00, 0x28, 0x22, 0x01, 0x57, 0x01, 0x50, 0x12, 0x84, 0x01, 0x59, 0x01, 0x57, 0xAD, 0x22,
0x01, 0x5C, 0x01, 0x50, 0x12, 0x84, 0x01, 0x59, 0x2C, 0x22, 0x00, 0x00, 0x27, 0x22, 0x01, 0x57,
0x01, 0x50, 0x12, 0x84, 0x01, 0x5A, 0xB1, 0x22, 0x01, 0x59, 0x12, 0x84, 0x01, 0x59, 0x2B, 0x22,
0x00, 0x00, 0x26, 0x22, 0x01, 0x57, 0x01, 0x50, 0x11, 0x84, 0x01, 0x50, 0x01, 0x52, 0xB3, 0x22,
0x01, 0x5A, 0x12, 0x84, 0x01, 0x59, 0x2A, 0x22, 0x00, 0x00, 0x26, 0x22, 0x01, 0x50, 0x11, 0x84,
0x01, 0x59, 0x01, 0x57, 0xB5, 0x22, 0x01, 0x52, 0x01, 0x50, 0x11, 0x84, 0x01, 0x5D, 0x29, 0x22,
0x00, 0x00, 0x25, 0x22, 0x01, 0x59, 0x11, 0x84, 0x01, 0x4D, 0xB8, 0x22, 0x01, 0x57, 0x01, 0x50,
0x11, 0x84, 0x01, 0x58, 0x28, 0x22, 0x00, 0x00, 0x24, 0x22, 0x01, 0x4D, 0x11, 0x84, 0x01, 0x58,
0xBB, 0x22, 0x01, 0x59, 0x11, 0x84, 0x01, 0x5E, 0x27, 0x22, 0x00, 0x00, 0x23, 0x22, 0x01, 0x58,
0x11, 0x84, 0x01, 0x4F, 0xBD, 0x22, 0x01, 0x59, 0x11, 0x84, 0x01, 0x5C, 0x26, 0x22, 0x00, 0x00,
0x22, 0x22, 0x01, 0x52, 0x11, 0x84, 0x01, 0x52, 0xBF, 0x22, 0x01, 0x58, 0x10, 0x84, 0x01, 0x50,
0x26, 0x22, 0x00, 0x00, 0x21, 0x22, 0x01, 0x57, 0x01, 0x50, 0x10, 0x84, 0x01, 0x52, 0xC1, 0x22,
0x01, 0x58, 0x10, 0x84, 0x01, 0x59, 0x25, 0x22, 0x00, 0x00, 0x21, 0x22, 0x01, 0x59, 0x10, 0x84,
0x01, 0x52, 0xC3, 0x22, 0x01, 0x58, 0x10, 0x84, 0x01, 0x5A, 0x24, 0x22, 0x00, 0x00, 0x20, 0x22,
0x01, 0x58, 0x10, 0x84, 0x01, 0x52, 0xC5, 0x22, 0x01, 0x58, 0x10, 0x84, 0x01, 0x5C, 0x23, 0x22,
0x00, 0x00, 0x1F, 0x22, 0x01, 0x5C, 0x10, 0x84, 0x01, 0x52, 0xC7, 0x22, 0x01, 0x58, 0x0F, 0x84,
0x01, 0x50, 0x23, 0x22, 0x00, 0x00, 0x1F, 0x22, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x4F, 0xC9, 0x22,
0x01, 0x59, 0x0F, 0x84, 0x01, 0x5D, 0x22, 0x22, 0x00, 0x00, 0x1E, 0x22, 0x01, 0x58, 0x0F, 0x84,
0x01, 0x58, 0xCB, 0x22, 0x01, 0x59, 0x0F, 0x84, 0x01, 0x5C, 0x21, 0x22, 0x00, 0x00, 0x1D, 0x22,
0x01, 0x4E, 0x0F, 0x84, 0x01, 0x59, 0xCC, 0x22, 0x01, 0x57, 0x01, 0x50, 0x0E, 0x84, 0x01, 0x56,
0x21, 0x22, 0x00, 0x00, 0x1D, 0x22, 0x01, 0x59, 0x0E, 0x84, 0x01, 0x50, 0xCE, 0x22, 0x01, 0x5C,
0x0F, 0x84, 0x01, 0x4F, 0x20, 0x22, 0x00, 0x00, 0x1C, 0x22, 0x01, 0x52, 0x0F, 0x84, 0x01, 0x57,
0xCF, 0x22, 0x01, 0x4F, 0x0F, 0x84, 0x20, 0x22, 0x00, 0x00, 0x01, 0x22, 0x01, 0x06, 0x3C, 0x4B,
0x01, 0x4A, 0xAE, 0x22, 0x01, 0x75, 0x3B, 0x4B, 0x00, 0x03, 0x71, 0x15, 0x22, 0x00, 0x00, 0x00,
0x00, 0x03, 0x1E, 0x4B, 0x71, 0x00, 0x3A, 0x0E, 0x00, 0x03, 0x6C, 0x4B, 0x00, 0x00, 0xAC, 0x22,
0x01, 0x4A, 0x01, 0x4B, 0x3B, 0x0E, 0x00, 0x03, 0x46, 0x4B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x4B, 0x0E, 0x00, 0x3A, 0x0A, 0x00, 0x03, 0x4A, 0x4B, 0x48, 0x00, 0xAC, 0x22, 0x01, 0x4A,
0x01, 0x4B, 0x3B, 0x0A, 0x01, 0x0E, 0x01, 0x4B, 0x00, 0x00, 0x00, 0x05, 0x1E, 0x4B, 0x02, 0x30,
0x2A, 0x00, 0x04, 0x4C, 0x01, 0x2E, 0x01, 0x30, 0x18, 0x4C, 0x01, 0x2E, 0x01, 0x04, 0x04, 0x4C,
0x01, 0x39, 0x01, 0x04, 0x07, 0x4C, 0x01, 0x2E, 0x01, 0x2E, 0x09, 0x4C, 0x00, 0x03, 0x04, 0x7A,
0x75, 0x00, 0xAC, 0x22, 0x00, 0x04, 0x3B, 0x75, 0x30, 0x04, 0x05, 0x4C, 0x01, 0x62, 0x01, 0x04,
0x18, 0x4C, 0x01, 0x04, 0x01, 0x2E, 0x04, 0x4C, 0x01, 0x2E, 0x01, 0x31, 0x07, 0x4C, 0x01, 0x30,
0x09, 0x4C, 0x00, 0x04, 0x39, 0x30, 0x4B, 0x15, 0x00, 0x00, 0x00, 0x05, 0x22, 0x48, 0x7A, 0x30,
0x12, 0x00, 0x04, 0x15, 0x00, 0x03, 0x01, 0x4C, 0x01, 0x00, 0x17, 0x15, 0x00, 0x09, 0x01, 0x4C,
0x0A, 0x15, 0x15, 0x15, 0x12, 0x2E, 0x21, 0x00, 0x05, 0x15, 0x00, 0x03, 0x21, 0x2E, 0x4C, 0x00,
0x08, 0x15, 0x00, 0x04, 0x0A, 0x62, 0x01, 0x3B, 0xAC, 0x22, 0x00, 0x0C, 0x37, 0x4B, 0x04, 0x62,
0x4A, 0x15, 0x15, 0x15, 0x21, 0x78, 0x78, 0x3B, 0x16, 0x15, 0x00, 0x03, 0x0D, 0x78, 0x01, 0x00,
0x04, 0x15, 0x01, 0x4C, 0x01, 0x12, 0x06, 0x15, 0x00, 0x03, 0x0A, 0x30, 0x0A, 0x00, 0x08, 0x15,
0x00, 0x04, 0x78, 0x04, 0x4B, 0x1E, 0x00, 0x00, 0x00, 0x11, 0x22, 0x06, 0x6C, 0x30, 0x31, 0x04,
0x30, 0x30, 0x42, 0x15, 0x15, 0x3D, 0x30, 0x30, 0x30, 0x02, 0x3A, 0x00, 0x0E, 0x30, 0x00, 0x21,
0x02, 0x30, 0x30, 0x30, 0x15, 0x15, 0x23, 0x30, 0x30, 0x30, 0x4C, 0x02, 0x2A, 0x30, 0x23, 0x30,
0x02, 0x30, 0x2E, 0x2E, 0x78, 0x30, 0x30, 0x30, 0x1C, 0x02, 0x30, 0x27, 0x30, 0x4C, 0x30, 0x71,
0x2A, 0x00, 0xAD, 0x22, 0x00, 0x0F, 0x71, 0x4C, 0x30, 0x2A, 0x30, 0x30, 0x30, 0x02, 0x15, 0x15,
0x02, 0x30, 0x30, 0x30, 0x02, 0x00, 0x0E, 0x30, 0x00, 0x22, 0x02, 0x30, 0x30, 0x30, 0x44, 0x15,
0x15, 0x44, 0x30, 0x30, 0x32, 0x4C, 0x78, 0x30, 0x32, 0x44, 0x30, 0x23, 0x30, 0x12, 0x30, 0x12,
0x30, 0x30, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x39, 0x2E, 0x4B, 0x22, 0x00, 0x00, 0x00, 0x40,
0x22, 0x05, 0x4B, 0x2E, 0x30, 0x39, 0x30, 0x30, 0x30, 0x32, 0x1F, 0x15, 0x1C, 0x30, 0x32, 0x1C,
0x32, 0x1C, 0x30, 0x04, 0x30, 0x42, 0x1C, 0x30, 0x32, 0x30, 0x04, 0x30, 0x1C, 0x1C, 0x30, 0x02,
0x30, 0x32, 0x30, 0x32, 0x44, 0x42, 0x30, 0x30, 0x30, 0x4C, 0x04, 0x3F, 0x4C, 0x01, 0x30, 0x4C,
0x4C, 0x78, 0x30, 0x12, 0x30, 0x32, 0x30, 0x32, 0x44, 0x30, 0x02, 0x30, 0x31, 0x62, 0x4B, 0x37,
0xAD, 0x22, 0x00, 0x3F, 0x0D, 0x6C, 0x30, 0x39, 0x62, 0x30, 0x30, 0x1C, 0x44, 0x15, 0x23, 0x30,
0x1C, 0x42, 0x1C, 0x32, 0x30, 0x1C, 0x1C, 0x30, 0x32, 0x30, 0x42, 0x1C, 0x3A, 0x32, 0x30, 0x32,
0x30, 0x32, 0x1C, 0x30, 0x04, 0x3A, 0x02, 0x32, 0x1C, 0x30, 0x30, 0x32, 0x4C, 0x2A, 0x4C, 0x78,
0x2E, 0x30, 0x01, 0x4C, 0x7A, 0x62, 0x7A, 0x30, 0x32, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x2A,
0x4C, 0x46, 0x22, 0x00, 0x00, 0x00, 0x00, 0x40, 0x22, 0x22, 0x48, 0x78, 0x30, 0x2A, 0x30, 0x30,
0x3A, 0x23, 0x23, 0x32, 0x32, 0x42, 0x42, 0x44, 0x3A, 0x32, 0x42, 0x1C, 0x44, 0x3A, 0x44, 0x30,
0x1C, 0x44, 0x42, 0x44, 0x3A, 0x44, 0x3A, 0x1C, 0x44, 0x1C, 0x44, 0x30, 0x32, 0x42, 0x30, 0x30,
0x30, 0x4C, 0x2E, 0x21, 0x15, 0x73, 0x23, 0x3D, 0x15, 0x0A, 0x30, 0x12, 0x30, 0x02, 0x30, 0x32,
0x32, 0x30, 0x02, 0x30, 0x4C, 0x2E, 0x4B, 0x05, 0xAD, 0x22, 0x00, 0x3F, 0x1E, 0x4B, 0x02, 0x62,
0x39, 0x30, 0x30, 0x44, 0x23, 0x27, 0x32, 0x44, 0x3A, 0x32, 0x42, 0x42, 0x44, 0x3A, 0x32, 0x42,
0x1C, 0x02, 0x3A, 0x44, 0x30, 0x32, 0x42, 0x1C, 0x44, 0x3A, 0x44, 0x1C, 0x32, 0x04, 0x1C, 0x44,
0x30, 0x30, 0x30, 0x32, 0x4C, 0x12, 0x15, 0x15, 0x1F, 0x23, 0x15, 0x15, 0x7A, 0x2E, 0x3D, 0x30,
0x02, 0x30, 0x44, 0x30, 0x44, 0x42, 0x62, 0x2E, 0x78, 0x01, 0x22, 0x00, 0x00, 0x00, 0x00, 0x3F,
0x22, 0x22, 0x15, 0x71, 0x30, 0x39, 0x62, 0x30, 0x30, 0x44, 0x44, 0x30, 0x32, 0x1C, 0x1C, 0x42,
0x30, 0x04, 0x3A, 0x32, 0x1C, 0x30, 0x44, 0x30, 0x32, 0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x32,
0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x42, 0x30, 0x30, 0x4C, 0x2E, 0x39, 0x32, 0x23, 0x32, 0x1F,
0x32, 0x7A, 0x30, 0x7A, 0x30, 0x27, 0x30, 0x32, 0x3A, 0x42, 0x44, 0x30, 0x31, 0x2A, 0x4B, 0x00,
0xAF, 0x22, 0x00, 0x3E, 0x48, 0x7A, 0x30, 0x2A, 0x30, 0x30, 0x3A, 0x27, 0x1C, 0x30, 0x44, 0x30,
0x32, 0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x1C, 0x04, 0x30, 0x32, 0x3A, 0x32, 0x32,
0x30, 0x04, 0x3A, 0x32, 0x1C, 0x32, 0x1C, 0x1C, 0x1C, 0x30, 0x1C, 0x4C, 0x12, 0x32, 0x44, 0x44,
0x32, 0x27, 0x32, 0x4C, 0x2E, 0x3D, 0x30, 0x02, 0x30, 0x02, 0x30, 0x02, 0x30, 0x2E, 0x02, 0x01,
0x21, 0x22, 0x00, 0x00, 0x00, 0x3F, 0x22, 0x22, 0x03, 0x4B, 0x31, 0x62, 0x39, 0x30, 0x2E, 0x30,
0x04, 0x02, 0x42, 0x2E, 0x3A, 0x27, 0x04, 0x1C, 0x2E, 0x1C, 0x23, 0x30, 0x02, 0x44, 0x1C, 0x02,
0x3A, 0x23, 0x30, 0x02, 0x04, 0x42, 0x02, 0x3A, 0x23, 0x30, 0x02, 0x04, 0x1C, 0x30, 0x30, 0x7A,
0x2E, 0x2E, 0x30, 0x3D, 0x30, 0x3D, 0x30, 0x4C, 0x30, 0x78, 0x30, 0x49, 0x30, 0x1F, 0x30, 0x02,
0x04, 0x30, 0x2A, 0x7A, 0x75, 0x00, 0xAF, 0x22, 0x00, 0x3E, 0x06, 0x71, 0x30, 0x15, 0x62, 0x30,
0x2E, 0x1C, 0x2E, 0x30, 0x04, 0x02, 0x1C, 0x2E, 0x3A, 0x44, 0x32, 0x1C, 0x2E, 0x1C, 0x23, 0x30,
0x02, 0x04, 0x1C, 0x3D, 0x1C, 0x27, 0x30, 0x02, 0x04, 0x1C, 0x2E, 0x1C, 0x3D, 0x30, 0x3A, 0x30,
0x30, 0x4C, 0x78, 0x30, 0x02, 0x02, 0x30, 0x3D, 0x30, 0x39, 0x02, 0x2E, 0x04, 0x1F, 0x30, 0x39,
0x30, 0x39, 0x30, 0x39, 0x30, 0x4B, 0x15, 0x22, 0x00, 0x00, 0x00, 0x3F, 0x22, 0x22, 0x22, 0x75,
0x3F, 0x30, 0x49, 0x04, 0x31, 0x2E, 0x04, 0x2E, 0x31, 0x73, 0x04, 0x02, 0x02, 0x04, 0x73, 0x04,
0x23, 0x31, 0x3D, 0x02, 0x04, 0x23, 0x04, 0x23, 0x02, 0x02, 0x23, 0x31, 0x3B, 0x04, 0x23, 0x04,
0x02, 0x02, 0x04, 0x04, 0x04, 0x12, 0x2E, 0x3D, 0x04, 0x39, 0x04, 0x39, 0x04, 0x7A, 0x30, 0x04,
0x30, 0x31, 0x30, 0x02, 0x30, 0x62, 0x04, 0x62, 0x62, 0x01, 0x3B, 0x00, 0xAF, 0x22, 0x00, 0x23,
0x05, 0x4B, 0x31, 0x02, 0x2A, 0x04, 0x49, 0x30, 0x02, 0x31, 0x02, 0x23, 0x04, 0x23, 0x04, 0x02,
0x02, 0x04, 0x73, 0x39, 0x39, 0x04, 0x02, 0x02, 0x04, 0x73, 0x04, 0x23, 0x04, 0x4C, 0x3D, 0x04,
0x73, 0x04, 0x23, 0x00, 0x04, 0x04, 0x00, 0x17, 0x4C, 0x3B, 0x04, 0x31, 0x27, 0x27, 0x31, 0x04,
0x4C, 0x30, 0x04, 0x04, 0x02, 0x30, 0x02, 0x30, 0x02, 0x30, 0x62, 0x04, 0x4B, 0x1E, 0x22, 0x00,
0x00, 0x00, 0x00, 0x32, 0x22, 0x22, 0x22, 0x28, 0x4B, 0x2E, 0x7A, 0x30, 0x04, 0x2A, 0x2E, 0x2E,
0x2A, 0x30, 0x47, 0x30, 0x23, 0x2E, 0x30, 0x78, 0x30, 0x4C, 0x7A, 0x30, 0x4C, 0x04, 0x30, 0x4C,
0x30, 0x4C, 0x30, 0x2A, 0x4C, 0x30, 0x4C, 0x42, 0x04, 0x2E, 0x30, 0x39, 0x30, 0x2A, 0x7A, 0x23,
0x30, 0x4C, 0x30, 0x4C, 0x30, 0x3F, 0x0B, 0x2E, 0x01, 0x71, 0x01, 0x00, 0xB0, 0x22, 0x00, 0x2F,
0x75, 0x3F, 0x2E, 0x4C, 0x30, 0x2A, 0x2E, 0x2E, 0x4C, 0x62, 0x30, 0x7A, 0x30, 0x2A, 0x30, 0x23,
0x2E, 0x30, 0x6C, 0x2A, 0x30, 0x7A, 0x30, 0x4C, 0x30, 0x2E, 0x2E, 0x30, 0x2A, 0x39, 0x30, 0x4C,
0x30, 0x4C, 0x30, 0x2E, 0x2E, 0x30, 0x7A, 0x3F, 0x30, 0x4C, 0x62, 0x2E, 0x31, 0x3A, 0x7A, 0x00,
0x0A, 0x2E, 0x00, 0x04, 0x2A, 0x4B, 0x22, 0x22, 0x00, 0x00, 0x04, 0x22, 0x01, 0x0D, 0x38, 0x4B,
0x01, 0x0D, 0xB1, 0x22, 0x01, 0x05, 0x01, 0x48, 0x37, 0x4B, 0x00, 0x04, 0x46, 0x0C, 0x22, 0x22,
0x00, 0x00, 0x06, 0x22, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x19, 0x85, 0x19, 0x49, 0x0D, 0x49, 0x0D,
0x06, 0x49, 0x0D, 0x00, 0x4B, 0x7A, 0x2A, 0x78, 0x47, 0x7A, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A,
0x39, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x47, 0x78, 0x49, 0x18, 0x0A, 0x0D, 0x49, 0x0D, 0x49,
0x0D, 0x28, 0xC0, 0x22, 0x00, 0x2C, 0x23, 0x00, 0x15, 0x05, 0x03, 0x05, 0x15, 0x49, 0x0C, 0x06,
0x15, 0x06, 0x00, 0x0A, 0x48, 0x3D, 0x47, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x39,
0x47, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x7A, 0x46, 0x49, 0x00, 0x00, 0x49, 0x15,
0x06, 0x36, 0x0B, 0x03, 0x03, 0x22, 0x00, 0x00, 0x09, 0x22, 0x00, 0x03, 0x15, 0x21, 0x21, 0x00,
0x08, 0x3B, 0x01, 0x45, 0x15, 0x4A, 0x01, 0x4B, 0x01, 0x0E, 0x09, 0x3B, 0x01, 0x12, 0x01, 0x28,
0xBE, 0x22, 0x01, 0x0D, 0x09, 0x21, 0x01, 0x75, 0x01, 0x18, 0x15, 0x4A, 0x01, 0x45, 0x01, 0x3B,
0x09, 0x21, 0x01, 0x28, 0x0A, 0x22, 0x00, 0x00, 0x08, 0x22, 0x01, 0x0A, 0x01, 0x22, 0x2B, 0x18,
0x01, 0x45, 0x01, 0x45, 0x21, 0x22, 0x00, 0x04, 0x57, 0x4E, 0x4E, 0x4E, 0x81, 0x22, 0x04, 0x4E,
0x13, 0x22, 0x01, 0x45, 0x01, 0x45, 0x2A, 0x18, 0x00, 0x03, 0x38, 0x22, 0x20, 0x00, 0x09, 0x22,
0x00, 0x00, 0x09, 0x22, 0x01, 0x2A, 0x2B, 0x30, 0x00, 0x03, 0x42, 0x22, 0x00, 0x00, 0x0F, 0x22,
0x01, 0x57, 0x04, 0x4D, 0x01, 0x52, 0x09, 0x22, 0x01, 0x5C, 0x01, 0x56, 0x04, 0x84, 0x01, 0x50,
0x01, 0x4F, 0x07, 0x22, 0x04, 0x4D, 0x01, 0x5D, 0x06, 0x22, 0x05, 0x4D, 0x01, 0x4F, 0x01, 0x22,
0x0D, 0x4D, 0x00, 0x06, 0x22, 0x22, 0x5E, 0x4D, 0x4D, 0x4D, 0x09, 0x22, 0x00, 0x03, 0x5E, 0x4D,
0x4D, 0x00, 0x13, 0x22, 0x01, 0x5A, 0x04, 0x4D, 0x04, 0x22, 0x01, 0x4E, 0x04, 0x4D, 0x00, 0x04,
0x52, 0x22, 0x22, 0x57, 0x04, 0x4D, 0x00, 0x09, 0x4F, 0x22, 0x22, 0x22, 0x57, 0x4D, 0x4D, 0x4D,
0x4E, 0x00, 0x09, 0x22, 0x00, 0x03, 0x4D, 0x4D, 0x52, 0x00, 0x07, 0x22, 0x01, 0x58, 0x05, 0x84,
0x01, 0x50, 0x01, 0x4F, 0x10, 0x22, 0x01, 0x2D, 0x01, 0x22, 0x2C, 0x30, 0x01, 0x12, 0x01, 0x71,
0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x00, 0x29, 0x2F, 0x00, 0x04, 0x34, 0x30,
0x22, 0x15, 0x10, 0x22, 0x04, 0x84, 0x01, 0x4D, 0x08, 0x22, 0x01, 0x52, 0x08, 0x84, 0x01, 0x59,
0x06, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x05, 0x22, 0x01, 0x52, 0x05, 0x84, 0x01, 0x5C, 0x01, 0x22,
0x0D, 0x84, 0x00, 0x06, 0x4E, 0x22, 0x4F, 0x84, 0x84, 0x84, 0x09, 0x22, 0x00, 0x03, 0x50, 0x84,
0x84, 0x00, 0x13, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x04, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x04,
0x4E, 0x22, 0x22, 0x4E, 0x04, 0x84, 0x00, 0x09, 0x4F, 0x22, 0x22, 0x22, 0x4E, 0x84, 0x84, 0x84,
0x4E, 0x00, 0x08, 0x22, 0x00, 0x04, 0x5D, 0x84, 0x84, 0x4E, 0x05, 0x22, 0x01, 0x52, 0x09, 0x84,
0x01, 0x58, 0x0F, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x7E, 0x29, 0x5B, 0x00, 0x03, 0x27, 0x12,
0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x29, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x00, 0x10, 0x22, 0x00, 0x05, 0x56, 0x84, 0x84, 0x84, 0x50, 0x00, 0x08, 0x22,
0x01, 0x50, 0x09, 0x84, 0x01, 0x50, 0x05, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x05, 0x22, 0x01, 0x56,
0x04, 0x84, 0x00, 0x04, 0x56, 0x22, 0x22, 0x59, 0x0C, 0x84, 0x00, 0x06, 0x4E, 0x22, 0x4F, 0x84,
0x84, 0x84, 0x08, 0x22, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x13, 0x22, 0x01, 0x59, 0x04, 0x84,
0x04, 0x22, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x5E, 0x04, 0x84, 0x00, 0x08,
0x52, 0x22, 0x22, 0x22, 0x4F, 0x84, 0x84, 0x84, 0x08, 0x22, 0x00, 0x04, 0x52, 0x84, 0x84, 0x84,
0x05, 0x22, 0x01, 0x5A, 0x0B, 0x84, 0x01, 0x52, 0x0E, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x29, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x29, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x10, 0x22, 0x01, 0x5D, 0x04, 0x84,
0x07, 0x22, 0x01, 0x4F, 0x0B, 0x84, 0x01, 0x59, 0x04, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x05,
0x4E, 0x22, 0x22, 0x22, 0x4E, 0x00, 0x05, 0x84, 0x00, 0x04, 0x52, 0x22, 0x22, 0x4D, 0x0C, 0x84,
0x00, 0x06, 0x4E, 0x22, 0x4F, 0x84, 0x84, 0x84, 0x08, 0x22, 0x00, 0x04, 0x50, 0x84, 0x84, 0x84,
0x13, 0x22, 0x04, 0x84, 0x01, 0x4D, 0x04, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x00, 0x04, 0x22, 0x22,
0x22, 0x4F, 0x04, 0x84, 0x00, 0x08, 0x4E, 0x22, 0x22, 0x22, 0x58, 0x84, 0x84, 0x56, 0x08, 0x22,
0x00, 0x04, 0x50, 0x84, 0x84, 0x56, 0x04, 0x22, 0x01, 0x52, 0x0C, 0x84, 0x01, 0x59, 0x0E, 0x22,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22,
0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x0C, 0x80, 0x00, 0x05, 0x69, 0x16, 0x16, 0x16,
0x69, 0x00, 0x07, 0x80, 0x00, 0x05, 0x24, 0x16, 0x16, 0x16, 0x24, 0x00, 0x0C, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x15, 0x10, 0x22, 0x01, 0x5E, 0x04, 0x84, 0x01, 0x52, 0x06, 0x22, 0x00, 0x09,
0x56, 0x84, 0x84, 0x84, 0x50, 0x52, 0x57, 0x5C, 0x59, 0x00, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x22,
0x22, 0x22, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x05, 0x4E, 0x22, 0x22, 0x22, 0x5D, 0x00, 0x04, 0x84,
0x00, 0x05, 0x50, 0x22, 0x22, 0x22, 0x4D, 0x00, 0x04, 0x84, 0x08, 0x4D, 0x00, 0x06, 0x57, 0x22,
0x4F, 0x84, 0x84, 0x84, 0x07, 0x22, 0x00, 0x05, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x13, 0x22,
0x04, 0x84, 0x01, 0x4D, 0x04, 0x22, 0x00, 0x09, 0x56, 0x84, 0x84, 0x84, 0x56, 0x22, 0x22, 0x22,
0x4D, 0x00, 0x04, 0x84, 0x04, 0x22, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4D, 0x07, 0x22, 0x00, 0x09,
0x4D, 0x84, 0x84, 0x84, 0x58, 0x22, 0x22, 0x22, 0x57, 0x00, 0x05, 0x84, 0x00, 0x04, 0x50, 0x5D,
0x58, 0x50, 0x05, 0x84, 0x0E, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x11, 0x82, 0x00, 0x09,
0x64, 0x2C, 0x1D, 0x60, 0x60, 0x60, 0x1D, 0x2C, 0x64, 0x00, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x0D, 0x80, 0x00, 0x04,
0x63, 0x85, 0x85, 0x26, 0x07, 0x80, 0x00, 0x05, 0x6A, 0x85, 0x85, 0x85, 0x16, 0x00, 0x0C, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x10, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x5A, 0x06, 0x22,
0x04, 0x84, 0x01, 0x52, 0x04, 0x22, 0x00, 0x09, 0x56, 0x84, 0x84, 0x84, 0x50, 0x22, 0x22, 0x22,
0x4E, 0x00, 0x04, 0x84, 0x00, 0x04, 0x4F, 0x22, 0x22, 0x22, 0x05, 0x84, 0x00, 0x05, 0x4F, 0x22,
0x22, 0x22, 0x5D, 0x00, 0x04, 0x84, 0x0A, 0x22, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x07, 0x22,
0x00, 0x05, 0x50, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x13, 0x22, 0x04, 0x84, 0x01, 0x5D, 0x04, 0x22,
0x04, 0x84, 0x00, 0x05, 0x5D, 0x22, 0x22, 0x22, 0x4D, 0x00, 0x04, 0x84, 0x04, 0x22, 0x00, 0x04,
0x84, 0x84, 0x84, 0x4F, 0x06, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x05, 0x5E, 0x22, 0x22, 0x22,
0x4D, 0x00, 0x04, 0x84, 0x01, 0x59, 0x04, 0x22, 0x01, 0x59, 0x04, 0x84, 0x0E, 0x22, 0x00, 0x04,
0x2D, 0x22, 0x30, 0x5B, 0x10, 0x82, 0x01, 0x14, 0x01, 0x67, 0x07, 0x85, 0x01, 0x14, 0x0F, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33,
0x0D, 0x80, 0x00, 0x04, 0x26, 0x85, 0x85, 0x6A, 0x06, 0x80, 0x01, 0x69, 0x04, 0x85, 0x01, 0x69,
0x0C, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x11, 0x22, 0x04, 0x84, 0x01, 0x4D, 0x05, 0x22,
0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x04, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x5E, 0x22,
0x22, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4F, 0x22, 0x22, 0x5A, 0x05, 0x84, 0x04, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x01, 0x4E, 0x09, 0x22, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x06, 0x22, 0x01, 0x58,
0x04, 0x84, 0x01, 0x4D, 0x12, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x22, 0x22, 0x22,
0x4E, 0x00, 0x04, 0x84, 0x00, 0x04, 0x4F, 0x22, 0x22, 0x22, 0x04, 0x84, 0x01, 0x4D, 0x04, 0x22,
0x00, 0x04, 0x84, 0x84, 0x84, 0x52, 0x05, 0x22, 0x01, 0x57, 0x05, 0x84, 0x00, 0x04, 0x4E, 0x22,
0x22, 0x4E, 0x04, 0x84, 0x01, 0x59, 0x05, 0x22, 0x00, 0x05, 0x5E, 0x84, 0x84, 0x84, 0x5D, 0x00,
0x0E, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0F, 0x82, 0x01, 0x1D, 0x09, 0x85, 0x01, 0x14,
0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x0D, 0x80, 0x00, 0x05, 0x24, 0x85, 0x85, 0x85, 0x09, 0x00, 0x05, 0x80, 0x00, 0x05,
0x16, 0x85, 0x85, 0x85, 0x6E, 0x00, 0x0D, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x15, 0x11, 0x22,
0x01, 0x4D, 0x04, 0x84, 0x05, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x57, 0x05, 0x22, 0x00, 0x08,
0x56, 0x84, 0x84, 0x84, 0x56, 0x22, 0x22, 0x22, 0x04, 0x84, 0x00, 0x04, 0x5D, 0x22, 0x22, 0x50,
0x04, 0x84, 0x01, 0x58, 0x04, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x22, 0x00, 0x04,
0x4F, 0x84, 0x84, 0x84, 0x06, 0x22, 0x05, 0x84, 0x01, 0x4D, 0x12, 0x22, 0x01, 0x4E, 0x04, 0x84,
0x00, 0x05, 0x4F, 0x22, 0x22, 0x22, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x22,
0x04, 0x84, 0x00, 0x09, 0x5D, 0x22, 0x22, 0x22, 0x4E, 0x84, 0x84, 0x84, 0x4E, 0x00, 0x05, 0x22,
0x01, 0x59, 0x05, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x4D, 0x04, 0x84, 0x01, 0x57, 0x05, 0x22,
0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5E, 0x00, 0x0E, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0E, 0x82, 0x01, 0x14, 0x04, 0x85, 0x00, 0x07, 0x6D, 0x2C, 0x11, 0x11, 0x14, 0x70, 0x14, 0x00,
0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x0E, 0x80, 0x00, 0x04, 0x63, 0x85, 0x85, 0x26, 0x05, 0x09, 0x00, 0x05, 0x6E, 0x85,
0x85, 0x85, 0x16, 0x00, 0x0D, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x11, 0x22, 0x01, 0x5A,
0x04, 0x84, 0x01, 0x57, 0x04, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x05, 0x22, 0x01, 0x5A,
0x04, 0x84, 0x00, 0x03, 0x57, 0x22, 0x22, 0x00, 0x04, 0x84, 0x00, 0x03, 0x4D, 0x22, 0x52, 0x00,
0x05, 0x84, 0x05, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x22, 0x00, 0x04, 0x4F, 0x84,
0x84, 0x84, 0x05, 0x22, 0x01, 0x58, 0x05, 0x84, 0x01, 0x4D, 0x12, 0x22, 0x01, 0x4E, 0x04, 0x84,
0x00, 0x05, 0x52, 0x22, 0x22, 0x22, 0x5D, 0x00, 0x04, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x4E,
0x04, 0x84, 0x00, 0x08, 0x4F, 0x22, 0x22, 0x22, 0x5E, 0x84, 0x84, 0x84, 0x05, 0x22, 0x01, 0x5A,
0x05, 0x84, 0x00, 0x04, 0x59, 0x22, 0x22, 0x57, 0x04, 0x84, 0x01, 0x58, 0x06, 0x22, 0x00, 0x05,
0x56, 0x84, 0x84, 0x84, 0x57, 0x00, 0x0E, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82,
0x00, 0x07, 0x64, 0x67, 0x85, 0x85, 0x85, 0x74, 0x64, 0x00, 0x15, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x0E, 0x80, 0x01, 0x26,
0x0C, 0x85, 0x01, 0x69, 0x0D, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x11, 0x22, 0x01, 0x52,
0x04, 0x84, 0x01, 0x52, 0x04, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x05, 0x22, 0x01, 0x4E,
0x04, 0x84, 0x00, 0x0A, 0x4F, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x84, 0x56, 0x22, 0x56, 0x04, 0x84,
0x01, 0x5D, 0x05, 0x22, 0x01, 0x52, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x22, 0x00, 0x04, 0x4F, 0x84,
0x84, 0x84, 0x05, 0x22, 0x06, 0x84, 0x01, 0x4D, 0x12, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x0D,
0x4E, 0x22, 0x22, 0x22, 0x50, 0x84, 0x84, 0x84, 0x5D, 0x22, 0x22, 0x22, 0x5C, 0x00, 0x04, 0x84,
0x00, 0x08, 0x52, 0x22, 0x22, 0x22, 0x5A, 0x84, 0x84, 0x56, 0x04, 0x22, 0x01, 0x4E, 0x06, 0x84,
0x00, 0x04, 0x58, 0x22, 0x22, 0x58, 0x04, 0x84, 0x01, 0x4E, 0x06, 0x22, 0x00, 0x04, 0x84, 0x84,
0x84, 0x50, 0x0F, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x01, 0x2C, 0x04, 0x85,
0x01, 0x11, 0x16, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22,
0x01, 0x1F, 0x01, 0x33, 0x0E, 0x80, 0x01, 0x24, 0x0B, 0x85, 0x01, 0x6E, 0x0E, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x15, 0x12, 0x22, 0x04, 0x84, 0x01, 0x5A, 0x04, 0x22, 0x01, 0x4E, 0x04, 0x84,
0x01, 0x52, 0x06, 0x22, 0x04, 0x84, 0x00, 0x04, 0x4D, 0x22, 0x22, 0x4D, 0x04, 0x84, 0x01, 0x58,
0x05, 0x84, 0x01, 0x4E, 0x05, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x52, 0x09, 0x22, 0x00, 0x04,
0x4F, 0x84, 0x84, 0x84, 0x04, 0x22, 0x01, 0x58, 0x06, 0x84, 0x01, 0x4D, 0x12, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x5C, 0x04, 0x84, 0x00, 0x05, 0x52, 0x22, 0x22, 0x22,
0x4F, 0x00, 0x04, 0x84, 0x00, 0x08, 0x4E, 0x22, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x4D, 0x04, 0x22,
0x01, 0x56, 0x06, 0x84, 0x00, 0x08, 0x5E, 0x22, 0x22, 0x50, 0x84, 0x84, 0x84, 0x56, 0x06, 0x22,
0x00, 0x05, 0x52, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x0F, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0D, 0x82, 0x00, 0x05, 0x1D, 0x85, 0x85, 0x85, 0x6D, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x0F, 0x80, 0x00, 0x0C,
0x63, 0x85, 0x85, 0x61, 0x16, 0x16, 0x16, 0x63, 0x85, 0x85, 0x85, 0x16, 0x0E, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x00, 0x12, 0x22, 0x00, 0x05, 0x50, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x04, 0x22,
0x01, 0x4E, 0x04, 0x84, 0x01, 0x4F, 0x06, 0x22, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x22,
0x22, 0x4F, 0x09, 0x84, 0x01, 0x4D, 0x06, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4F, 0x09, 0x22,
0x00, 0x08, 0x4E, 0x84, 0x84, 0x84, 0x22, 0x22, 0x22, 0x57, 0x07, 0x84, 0x00, 0x04, 0x4D, 0x22,
0x22, 0x52, 0x0C, 0x4D, 0x00, 0x04, 0x5C, 0x22, 0x22, 0x4F, 0x04, 0x84, 0x00, 0x04, 0x22, 0x22,
0x22, 0x4D, 0x04, 0x84, 0x04, 0x22, 0x01, 0x58, 0x04, 0x84, 0x04, 0x22, 0x00, 0x08, 0x50, 0x84,
0x84, 0x4F, 0x22, 0x22, 0x22, 0x5D, 0x07, 0x84, 0x00, 0x03, 0x4E, 0x22, 0x57, 0x00, 0x04, 0x84,
0x01, 0x5A, 0x06, 0x22, 0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5E, 0x00, 0x0F, 0x22, 0x00, 0x04,
0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x70, 0x00, 0x17, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33,
0x0F, 0x80, 0x00, 0x07, 0x26, 0x85, 0x85, 0x77, 0x80, 0x80, 0x69, 0x00, 0x04, 0x85, 0x01, 0x69,
0x0E, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x12, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x05, 0x22,
0x04, 0x84, 0x01, 0x58, 0x06, 0x22, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x03, 0x22, 0x22, 0x4F, 0x00,
0x09, 0x84, 0x01, 0x52, 0x06, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4F, 0x09, 0x22, 0x00, 0x08,
0x4E, 0x84, 0x84, 0x84, 0x22, 0x22, 0x22, 0x4D, 0x07, 0x84, 0x00, 0x04, 0x4D, 0x22, 0x22, 0x5A,
0x0C, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x4D, 0x04, 0x84, 0x00, 0x03, 0x22, 0x22, 0x5C, 0x00,
0x04, 0x84, 0x01, 0x58, 0x04, 0x22, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x00, 0x04, 0x22,
0x00, 0x07, 0x84, 0x84, 0x84, 0x52, 0x22, 0x22, 0x5C, 0x00, 0x08, 0x84, 0x00, 0x03, 0x22, 0x22,
0x4F, 0x00, 0x04, 0x84, 0x00, 0x0C, 0x4E, 0x22, 0x22, 0x22, 0x5E, 0x4F, 0x4F, 0x56, 0x84, 0x84,
0x84, 0x57, 0x0F, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85,
0x85, 0x85, 0x14, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00,
0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x0F, 0x80, 0x00, 0x0B, 0x24, 0x85, 0x85, 0x85, 0x69, 0x80,
0x16, 0x85, 0x85, 0x85, 0x77, 0x00, 0x0F, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x15, 0x12, 0x22,
0x01, 0x4F, 0x04, 0x84, 0x01, 0x57, 0x04, 0x22, 0x00, 0x05, 0x50, 0x84, 0x84, 0x84, 0x4D, 0x00,
0x06, 0x22, 0x01, 0x52, 0x04, 0x84, 0x00, 0x03, 0x4E, 0x22, 0x4E, 0x00, 0x08, 0x84, 0x01, 0x56,
0x08, 0x22, 0x08, 0x84, 0x00, 0x0D, 0x59, 0x4D, 0x57, 0x22, 0x22, 0x22, 0x4E, 0x84, 0x84, 0x84,
0x22, 0x22, 0x4E, 0x00, 0x05, 0x84, 0x00, 0x07, 0x56, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x4D, 0x00,
0x0C, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x4D, 0x04, 0x84, 0x00, 0x07, 0x4E, 0x5E, 0x50, 0x84,
0x84, 0x84, 0x50, 0x00, 0x05, 0x22, 0x00, 0x10, 0x56, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x22,
0x4E, 0x84, 0x84, 0x84, 0x4E, 0x22, 0x22, 0x50, 0x04, 0x84, 0x00, 0x0B, 0x50, 0x84, 0x84, 0x59,
0x22, 0x22, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x00, 0x04, 0x22, 0x06, 0x84, 0x01, 0x50, 0x10, 0x22,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x14, 0x00,
0x17, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x10, 0x80, 0x00, 0x0A, 0x63, 0x85, 0x85, 0x24, 0x80, 0x6E, 0x85, 0x85, 0x85, 0x24,
0x0F, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x12, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x52,
0x04, 0x22, 0x01, 0x4D, 0x04, 0x84, 0x06, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x03, 0x4F, 0x22,
0x4E, 0x00, 0x08, 0x84, 0x01, 0x5E, 0x08, 0x22, 0x0A, 0x84, 0x00, 0x0B, 0x52, 0x22, 0x22, 0x22,
0x4E, 0x84, 0x84, 0x84, 0x22, 0x22, 0x4D, 0x00, 0x04, 0x84, 0x00, 0x08, 0x58, 0x4D, 0x84, 0x84,
0x4D, 0x22, 0x22, 0x4D, 0x0C, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x4D, 0x0A, 0x84, 0x01, 0x52,
0x05, 0x22, 0x04, 0x84, 0x00, 0x0B, 0x58, 0x22, 0x22, 0x22, 0x52, 0x84, 0x84, 0x84, 0x22, 0x22,
0x4D, 0x00, 0x04, 0x84, 0x00, 0x07, 0x5D, 0x59, 0x84, 0x84, 0x58, 0x22, 0x22, 0x00, 0x04, 0x84,
0x00, 0x05, 0x4D, 0x22, 0x22, 0x22, 0x5C, 0x00, 0x06, 0x84, 0x01, 0x58, 0x10, 0x22, 0x00, 0x04,
0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x14, 0x00, 0x17, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33,
0x10, 0x80, 0x00, 0x05, 0x26, 0x85, 0x85, 0x77, 0x69, 0x00, 0x04, 0x85, 0x01, 0x69, 0x0F, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x0C, 0x13, 0x22, 0x04, 0x84, 0x01, 0x5A, 0x04, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x07, 0x22, 0x04, 0x84, 0x00, 0x03, 0x4F, 0x22, 0x22, 0x00, 0x07, 0x84, 0x01, 0x50,
0x09, 0x22, 0x0A, 0x84, 0x00, 0x0A, 0x4F, 0x22, 0x22, 0x22, 0x4E, 0x84, 0x84, 0x84, 0x22, 0x4E,
0x05, 0x84, 0x00, 0x08, 0x22, 0x4D, 0x84, 0x84, 0x5A, 0x22, 0x22, 0x4D, 0x0C, 0x84, 0x00, 0x04,
0x22, 0x22, 0x22, 0x50, 0x09, 0x84, 0x01, 0x52, 0x06, 0x22, 0x04, 0x84, 0x00, 0x0A, 0x4F, 0x22,
0x22, 0x22, 0x4F, 0x84, 0x84, 0x56, 0x22, 0x5E, 0x04, 0x84, 0x00, 0x08, 0x50, 0x51, 0x84, 0x84,
0x84, 0x5E, 0x22, 0x57, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x22, 0x22, 0x22, 0x4F, 0x00, 0x06, 0x84,
0x01, 0x52, 0x10, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85,
0x85, 0x85, 0x60, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00,
0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x10, 0x80, 0x00, 0x09, 0x24, 0x85, 0x85, 0x63, 0x16, 0x85,
0x85, 0x85, 0x77, 0x00, 0x10, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x22, 0x00, 0x05,
0x56, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x04, 0x22, 0x01, 0x5C, 0x04, 0x84, 0x01, 0x4E, 0x06, 0x22,
0x04, 0x84, 0x00, 0x03, 0x4D, 0x22, 0x22, 0x00, 0x07, 0x84, 0x01, 0x56, 0x09, 0x22, 0x01, 0x56,
0x09, 0x84, 0x00, 0x0A, 0x4F, 0x22, 0x22, 0x22, 0x4E, 0x84, 0x84, 0x84, 0x22, 0x4D, 0x04, 0x84,
0x00, 0x09, 0x58, 0x22, 0x4D, 0x84, 0x84, 0x4F, 0x22, 0x22, 0x57, 0x00, 0x07, 0x4E, 0x05, 0x4F,
0x00, 0x03, 0x22, 0x22, 0x22, 0x00, 0x09, 0x84, 0x01, 0x4D, 0x06, 0x22, 0x01, 0x4E, 0x04, 0x84,
0x00, 0x0A, 0x5C, 0x22, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x4D, 0x57, 0x50, 0x04, 0x84, 0x00, 0x08,
0x5C, 0x57, 0x84, 0x84, 0x84, 0x4E, 0x22, 0x5E, 0x04, 0x84, 0x00, 0x05, 0x4E, 0x22, 0x22, 0x22,
0x5A, 0x00, 0x06, 0x4D, 0x11, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05,
0x14, 0x85, 0x85, 0x85, 0x67, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22,
0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x11, 0x80, 0x01, 0x63, 0x06, 0x85, 0x01, 0x24,
0x10, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x22, 0x01, 0x58, 0x04, 0x84, 0x05, 0x22,
0x04, 0x84, 0x01, 0x4F, 0x06, 0x22, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x4D,
0x07, 0x84, 0x01, 0x4F, 0x08, 0x22, 0x01, 0x4D, 0x09, 0x84, 0x00, 0x09, 0x4F, 0x22, 0x22, 0x22,
0x4E, 0x84, 0x84, 0x84, 0x52, 0x00, 0x05, 0x84, 0x00, 0x06, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x4F,
0x12, 0x22, 0x0B, 0x84, 0x01, 0x5C, 0x04, 0x22, 0x01, 0x5E, 0x04, 0x84, 0x00, 0x09, 0x4E, 0x22,
0x22, 0x22, 0x59, 0x84, 0x84, 0x4F, 0x59, 0x00, 0x04, 0x84, 0x00, 0x09, 0x5D, 0x22, 0x52, 0x84,
0x84, 0x84, 0x22, 0x22, 0x5A, 0x00, 0x04, 0x84, 0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0D, 0x82, 0x01, 0x11, 0x04, 0x85, 0x01, 0x14, 0x16, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x11, 0x80, 0x01, 0x26, 0x05, 0x85,
0x01, 0x63, 0x11, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x22, 0x01, 0x5E, 0x04, 0x84,
0x01, 0x57, 0x04, 0x22, 0x00, 0x05, 0x56, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x06, 0x22, 0x00, 0x10,
0x4D, 0x84, 0x84, 0x84, 0x59, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x50, 0x84, 0x84, 0x84,
0x08, 0x22, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x08, 0x84,
0x00, 0x07, 0x58, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x4F, 0x00, 0x11, 0x22, 0x01, 0x57, 0x04, 0x84,
0x00, 0x03, 0x4D, 0x4F, 0x5A, 0x00, 0x04, 0x84, 0x01, 0x56, 0x04, 0x22, 0x01, 0x4F, 0x04, 0x84,
0x04, 0x22, 0x00, 0x04, 0x84, 0x84, 0x84, 0x56, 0x04, 0x84, 0x00, 0x0E, 0x50, 0x22, 0x22, 0x5A,
0x84, 0x84, 0x59, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22,
0x30, 0x5B, 0x0E, 0x82, 0x00, 0x06, 0x60, 0x85, 0x85, 0x85, 0x67, 0x11, 0x15, 0x82, 0x00, 0x03,
0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x11, 0x80,
0x01, 0x24, 0x05, 0x85, 0x01, 0x26, 0x11, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x22,
0x01, 0x57, 0x04, 0x84, 0x01, 0x52, 0x04, 0x22, 0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x50, 0x00,
0x06, 0x22, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x03, 0x22, 0x22, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x05,
0x4F, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x07, 0x22, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x00,
0x09, 0x22, 0x01, 0x4E, 0x08, 0x84, 0x00, 0x07, 0x22, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x4F, 0x00,
0x11, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x5E, 0x04, 0x84, 0x00, 0x0D,
0x57, 0x22, 0x22, 0x22, 0x5D, 0x84, 0x84, 0x84, 0x50, 0x22, 0x22, 0x22, 0x57, 0x00, 0x08, 0x84,
0x00, 0x0E, 0x5C, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x5A, 0x22, 0x22, 0x56, 0x84, 0x84, 0x84, 0x4D,
0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0E, 0x82, 0x01, 0x11, 0x01, 0x67, 0x04, 0x85,
0x00, 0x06, 0x1D, 0x2C, 0x2C, 0x14, 0x70, 0x14, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x12, 0x80, 0x01, 0x63, 0x04, 0x85,
0x01, 0x24, 0x11, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x22, 0x04, 0x84, 0x01, 0x5A,
0x04, 0x22, 0x01, 0x5C, 0x04, 0x84, 0x06, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x03, 0x22, 0x22,
0x4F, 0x00, 0x04, 0x84, 0x00, 0x06, 0x51, 0x56, 0x84, 0x84, 0x84, 0x5C, 0x06, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x09, 0x22, 0x01, 0x4E, 0x07, 0x84, 0x00, 0x08, 0x58, 0x22, 0x22, 0x22, 0x4D, 0x84,
0x84, 0x4F, 0x11, 0x22, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x22, 0x04, 0x84,
0x00, 0x0D, 0x4E, 0x22, 0x22, 0x22, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x22, 0x5C, 0x00,
0x07, 0x84, 0x00, 0x0A, 0x5A, 0x22, 0x22, 0x22, 0x84, 0x84, 0x84, 0x52, 0x22, 0x22, 0x04, 0x84,
0x01, 0x4D, 0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0F, 0x82, 0x01, 0x11, 0x01, 0x67,
0x08, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00,
0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x12, 0x80, 0x00, 0x05, 0x26, 0x85, 0x85, 0x85, 0x63, 0x00,
0x12, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x22, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84,
0x4D, 0x00, 0x05, 0x22, 0x00, 0x05, 0x50, 0x84, 0x84, 0x84, 0x5E, 0x00, 0x05, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x00, 0x03, 0x22, 0x22, 0x4E, 0x00, 0x04, 0x84, 0x00, 0x06, 0x4E, 0x5C, 0x84, 0x84,
0x84, 0x56, 0x06, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x0A, 0x22, 0x07, 0x84, 0x04, 0x22, 0x00, 0x04,
0x4D, 0x84, 0x84, 0x4F, 0x11, 0x22, 0x01, 0x52, 0x04, 0x84, 0x00, 0x04, 0x57, 0x22, 0x22, 0x22,
0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x22, 0x04, 0x84, 0x00, 0x05, 0x58, 0x22, 0x22, 0x22,
0x4F, 0x00, 0x06, 0x84, 0x00, 0x0B, 0x56, 0x22, 0x22, 0x22, 0x57, 0x84, 0x84, 0x84, 0x57, 0x22,
0x22, 0x00, 0x04, 0x84, 0x01, 0x5A, 0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x10, 0x82,
0x01, 0x11, 0x01, 0x60, 0x07, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x12, 0x80, 0x00, 0x05, 0x09, 0x16,
0x16, 0x16, 0x24, 0x00, 0x12, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x22, 0x01, 0x5A,
0x04, 0x84, 0x05, 0x22, 0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x05, 0x22, 0x00, 0x08,
0x4F, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x4E, 0x04, 0x84, 0x00, 0x07, 0x4E, 0x22, 0x4D, 0x84,
0x84, 0x84, 0x4F, 0x00, 0x05, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x0A, 0x22, 0x06, 0x84, 0x01, 0x58,
0x04, 0x22, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x04,
0x22, 0x22, 0x22, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x22, 0x22, 0x22, 0x04, 0x84, 0x00, 0x05,
0x4F, 0x22, 0x22, 0x22, 0x5D, 0x00, 0x06, 0x84, 0x00, 0x0B, 0x4E, 0x22, 0x22, 0x22, 0x52, 0x84,
0x84, 0x84, 0x22, 0x22, 0x22, 0x00, 0x04, 0x84, 0x01, 0x4D, 0x1C, 0x22, 0x00, 0x04, 0x2D, 0x22,
0x30, 0x5B, 0x12, 0x82, 0x00, 0x08, 0x11, 0x14, 0x1D, 0x60, 0x1D, 0x14, 0x2C, 0x64, 0x0F, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33,
0x29, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x22, 0x01, 0x5C, 0x04, 0x84, 0x01, 0x57,
0x05, 0x22, 0x04, 0x84, 0x05, 0x22, 0x00, 0x08, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x22,
0x04, 0x84, 0x00, 0x03, 0x4F, 0x22, 0x4E, 0x00, 0x04, 0x84, 0x05, 0x22, 0x01, 0x52, 0x04, 0x84,
0x0A, 0x22, 0x06, 0x84, 0x05, 0x22, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x22, 0x01, 0x4F,
0x04, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x52, 0x04, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x4E,
0x04, 0x84, 0x00, 0x05, 0x5C, 0x22, 0x22, 0x22, 0x4D, 0x00, 0x05, 0x84, 0x01, 0x5A, 0x04, 0x22,
0x00, 0x07, 0x5A, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x22, 0x00, 0x04, 0x84, 0x01, 0x59, 0x1C, 0x22,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22,
0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x04, 0x80, 0x00, 0x21, 0x69, 0x09, 0x09, 0x69,
0x80, 0x80, 0x09, 0x09, 0x80, 0x09, 0x69, 0x80, 0x80, 0x09, 0x09, 0x80, 0x09, 0x09, 0x80, 0x69,
0x09, 0x69, 0x80, 0x69, 0x09, 0x09, 0x80, 0x80, 0x09, 0x69, 0x80, 0x80, 0x09, 0x00, 0x04, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x15, 0x22, 0x04, 0x84, 0x01, 0x52, 0x05, 0x22, 0x00, 0x05,
0x58, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x04, 0x22, 0x00, 0x08, 0x5D, 0x84, 0x84, 0x84, 0x5A, 0x22,
0x22, 0x22, 0x04, 0x84, 0x00, 0x08, 0x4F, 0x22, 0x22, 0x58, 0x84, 0x84, 0x84, 0x4D, 0x04, 0x22,
0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x22, 0x05, 0x84, 0x01, 0x58, 0x05, 0x22, 0x00, 0x04,
0x4D, 0x84, 0x84, 0x4F, 0x11, 0x22, 0x00, 0x09, 0x58, 0x84, 0x84, 0x84, 0x56, 0x22, 0x22, 0x22,
0x5D, 0x00, 0x04, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x5C, 0x04, 0x84, 0x00, 0x04, 0x57, 0x22,
0x22, 0x22, 0x05, 0x84, 0x01, 0x56, 0x05, 0x22, 0x00, 0x07, 0x4D, 0x84, 0x84, 0x5A, 0x22, 0x22,
0x22, 0x00, 0x05, 0x84, 0x1C, 0x22, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x11,
0x11, 0x11, 0x82, 0x82, 0x64, 0x11, 0x68, 0x68, 0x11, 0x82, 0x82, 0x64, 0x11, 0x68, 0x68, 0x11,
0x64, 0x82, 0x11, 0x11, 0x82, 0x82, 0x11, 0x11, 0x68, 0x82, 0x64, 0x11, 0x82, 0x82, 0x64, 0x68,
0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x04, 0x80, 0x00, 0x21, 0x85, 0x6A, 0x63, 0x85, 0x24, 0x80, 0x61, 0x61, 0x80, 0x6E,
0x26, 0x80, 0x69, 0x85, 0x26, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x09, 0x63, 0x6E, 0x63,
0x6E, 0x69, 0x85, 0x09, 0x80, 0x16, 0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D,
0x11, 0x22, 0x04, 0x4D, 0x04, 0x84, 0x00, 0x07, 0x56, 0x4D, 0x5A, 0x4F, 0x52, 0x22, 0x22, 0x00,
0x04, 0x84, 0x00, 0x04, 0x58, 0x22, 0x22, 0x52, 0x04, 0x84, 0x00, 0x15, 0x52, 0x22, 0x22, 0x22,
0x4D, 0x84, 0x84, 0x84, 0x5D, 0x22, 0x22, 0x22, 0x50, 0x84, 0x84, 0x84, 0x5C, 0x22, 0x22, 0x22,
0x4E, 0x00, 0x04, 0x84, 0x01, 0x5E, 0x06, 0x4E, 0x00, 0x03, 0x22, 0x22, 0x22, 0x00, 0x05, 0x84,
0x06, 0x22, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x22, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84,
0x4D, 0x22, 0x22, 0x52, 0x04, 0x84, 0x00, 0x05, 0x59, 0x22, 0x22, 0x22, 0x4F, 0x00, 0x04, 0x84,
0x04, 0x22, 0x05, 0x84, 0x01, 0x4E, 0x05, 0x22, 0x00, 0x08, 0x50, 0x84, 0x84, 0x52, 0x22, 0x22,
0x22, 0x4D, 0x04, 0x84, 0x01, 0x4D, 0x04, 0x22, 0x01, 0x4E, 0x01, 0x4D, 0x15, 0x22, 0x00, 0x28,
0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x11, 0x85, 0x74, 0x85, 0x67, 0x68, 0x11, 0x85, 0x14, 0x11,
0x85, 0x11, 0x82, 0x1D, 0x85, 0x11, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85, 0x82, 0x1D, 0x85, 0x74,
0x85, 0x14, 0x11, 0x85, 0x82, 0x64, 0x74, 0x14, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x04, 0x80, 0x00, 0x21, 0x69, 0x80,
0x69, 0x85, 0x61, 0x80, 0x61, 0x61, 0x80, 0x16, 0x63, 0x61, 0x6E, 0x85, 0x09, 0x80, 0x85, 0x61,
0x80, 0x09, 0x85, 0x09, 0x77, 0x63, 0x80, 0x24, 0x85, 0x24, 0x85, 0x09, 0x24, 0x85, 0x85, 0x00,
0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x22, 0x01, 0x59, 0x0B, 0x84, 0x00, 0x04,
0x59, 0x22, 0x22, 0x4F, 0x0B, 0x84, 0x04, 0x22, 0x00, 0x11, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x22,
0x22, 0x22, 0x4F, 0x84, 0x84, 0x84, 0x56, 0x22, 0x22, 0x22, 0x4E, 0x00, 0x0B, 0x84, 0x00, 0x03,
0x4F, 0x22, 0x22, 0x00, 0x04, 0x84, 0x01, 0x58, 0x06, 0x22, 0x00, 0x04, 0x50, 0x84, 0x84, 0x5E,
0x11, 0x22, 0x00, 0x07, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x4D, 0x56, 0x00, 0x05, 0x84, 0x00, 0x0D,
0x5A, 0x22, 0x22, 0x22, 0x5A, 0x84, 0x84, 0x84, 0x56, 0x22, 0x22, 0x22, 0x4E, 0x00, 0x04, 0x84,
0x01, 0x4F, 0x06, 0x22, 0x00, 0x08, 0x84, 0x84, 0x84, 0x57, 0x22, 0x22, 0x22, 0x5A, 0x05, 0x84,
0x00, 0x06, 0x56, 0x5A, 0x5A, 0x59, 0x84, 0x56, 0x15, 0x22, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B,
0x82, 0x82, 0x64, 0x82, 0x82, 0x1D, 0x85, 0x11, 0x11, 0x85, 0x14, 0x82, 0x6D, 0x6D, 0x60, 0x67,
0x6D, 0x82, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85, 0x68, 0x85, 0x1D, 0x82, 0x60, 0x85, 0x11, 0x85,
0x82, 0x60, 0x85, 0x14, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x18, 0x00, 0x09, 0x22, 0x00, 0x00,
0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x05, 0x80, 0x00, 0x20, 0x26, 0x63, 0x85, 0x16, 0x80, 0x61,
0x61, 0x80, 0x69, 0x85, 0x16, 0x6A, 0x6A, 0x80, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x61,
0x61, 0x80, 0x09, 0x85, 0x16, 0x85, 0x16, 0x85, 0x63, 0x85, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30,
0x22, 0x2D, 0x11, 0x22, 0x01, 0x58, 0x0C, 0x84, 0x00, 0x04, 0x22, 0x22, 0x22, 0x4D, 0x09, 0x84,
0x01, 0x58, 0x04, 0x22, 0x00, 0x05, 0x4F, 0x84, 0x84, 0x84, 0x56, 0x00, 0x04, 0x22, 0x00, 0x08,
0x56, 0x84, 0x84, 0x84, 0x4F, 0x22, 0x22, 0x22, 0x0B, 0x84, 0x00, 0x03, 0x4F, 0x22, 0x22, 0x00,
0x04, 0x84, 0x07, 0x22, 0x00, 0x04, 0x84, 0x84, 0x84, 0x4E, 0x11, 0x22, 0x01, 0x56, 0x0B, 0x84,
0x04, 0x22, 0x00, 0x0D, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x22, 0x4F, 0x84, 0x84, 0x84,
0x59, 0x00, 0x06, 0x22, 0x00, 0x04, 0x5C, 0x84, 0x84, 0x84, 0x04, 0x22, 0x01, 0x57, 0x0A, 0x84,
0x01, 0x58, 0x15, 0x22, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x11, 0x74, 0x85,
0x67, 0x68, 0x11, 0x85, 0x14, 0x82, 0x14, 0x85, 0x14, 0x85, 0x14, 0x82, 0x14, 0x85, 0x11, 0x82,
0x60, 0x85, 0x11, 0x85, 0x14, 0x82, 0x14, 0x85, 0x11, 0x85, 0x1D, 0x85, 0x85, 0x14, 0x05, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33,
0x04, 0x80, 0x00, 0x21, 0x26, 0x85, 0x61, 0x24, 0x80, 0x80, 0x61, 0x61, 0x80, 0x80, 0x77, 0x6E,
0x85, 0x16, 0x80, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x61, 0x6A, 0x80, 0x09, 0x85, 0x16,
0x85, 0x85, 0x6A, 0x24, 0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x22,
0x01, 0x52, 0x0C, 0x84, 0x00, 0x05, 0x4E, 0x22, 0x22, 0x22, 0x59, 0x00, 0x07, 0x84, 0x01, 0x50,
0x05, 0x22, 0x01, 0x4F, 0x04, 0x84, 0x04, 0x22, 0x01, 0x52, 0x04, 0x84, 0x00, 0x03, 0x22, 0x22,
0x22, 0x00, 0x0B, 0x84, 0x00, 0x07, 0x4F, 0x22, 0x22, 0x84, 0x84, 0x84, 0x5A, 0x00, 0x07, 0x22,
0x00, 0x04, 0x84, 0x84, 0x84, 0x4E, 0x11, 0x22, 0x0B, 0x84, 0x01, 0x5A, 0x04, 0x22, 0x00, 0x0D,
0x56, 0x84, 0x84, 0x84, 0x5A, 0x22, 0x22, 0x22, 0x5A, 0x84, 0x84, 0x84, 0x57, 0x00, 0x06, 0x22,
0x00, 0x04, 0x4F, 0x84, 0x84, 0x4D, 0x05, 0x22, 0x01, 0x4D, 0x09, 0x84, 0x01, 0x52, 0x15, 0x22,
0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x67, 0x67, 0x1D, 0x68, 0x82, 0x11, 0x85,
0x14, 0x82, 0x68, 0x85, 0x6D, 0x85, 0x68, 0x82, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85, 0x11, 0x85,
0x14, 0x82, 0x1D, 0x85, 0x11, 0x85, 0x85, 0x1D, 0x60, 0x14, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x04, 0x80, 0x00, 0x21,
0x26, 0x85, 0x24, 0x16, 0x24, 0x16, 0x6A, 0x6A, 0x16, 0x69, 0x24, 0x85, 0x85, 0x69, 0x09, 0x16,
0x85, 0x6A, 0x16, 0x09, 0x85, 0x09, 0x16, 0x85, 0x16, 0x26, 0x85, 0x09, 0x85, 0x63, 0x09, 0x09,
0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x22, 0x01, 0x57, 0x0C, 0x84,
0x01, 0x52, 0x04, 0x22, 0x01, 0x4F, 0x05, 0x84, 0x01, 0x50, 0x01, 0x57, 0x05, 0x22, 0x01, 0x4E,
0x04, 0x84, 0x05, 0x22, 0x00, 0x07, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x22, 0x22, 0x00, 0x0B, 0x84,
0x00, 0x06, 0x4F, 0x22, 0x22, 0x84, 0x84, 0x50, 0x08, 0x22, 0x00, 0x04, 0x84, 0x84, 0x84, 0x4E,
0x11, 0x22, 0x0A, 0x84, 0x01, 0x59, 0x05, 0x22, 0x04, 0x84, 0x00, 0x08, 0x4F, 0x22, 0x22, 0x22,
0x4D, 0x84, 0x84, 0x4F, 0x07, 0x22, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x5A, 0x05, 0x22, 0x01, 0x57,
0x01, 0x50, 0x08, 0x84, 0x16, 0x22, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x67,
0x6D, 0x2C, 0x14, 0x11, 0x1D, 0x85, 0x60, 0x2C, 0x82, 0x60, 0x85, 0x70, 0x82, 0x2C, 0x60, 0x85,
0x1D, 0x11, 0x60, 0x85, 0x82, 0x6D, 0x74, 0x2C, 0x6D, 0x60, 0x11, 0x85, 0x1D, 0x82, 0x60, 0x14,
0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x04, 0x80, 0x00, 0x05, 0x69, 0x26, 0x61, 0x61, 0x16, 0x00, 0x04, 0x61, 0x00, 0x06,
0x09, 0x80, 0x61, 0x26, 0x80, 0x24, 0x04, 0x61, 0x00, 0x0E, 0x09, 0x61, 0x09, 0x80, 0x16, 0x61,
0x61, 0x24, 0x80, 0x61, 0x09, 0x80, 0x09, 0x61, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D,
0x25, 0x22, 0x00, 0x04, 0x52, 0x4F, 0x4F, 0x52, 0x08, 0x22, 0x04, 0x4E, 0x06, 0x22, 0x04, 0x4E,
0x01, 0x22, 0x01, 0x22, 0x04, 0x4E, 0x01, 0x52, 0x06, 0x4F, 0x00, 0x06, 0x4E, 0x22, 0x22, 0x4F,
0x4F, 0x5C, 0x08, 0x22, 0x00, 0x03, 0x4F, 0x4F, 0x4F, 0x00, 0x12, 0x22, 0x08, 0x4D, 0x01, 0x5D,
0x01, 0x52, 0x06, 0x22, 0x04, 0x4D, 0x00, 0x07, 0x57, 0x22, 0x22, 0x22, 0x50, 0x84, 0x59, 0x00,
0x08, 0x22, 0x00, 0x04, 0x50, 0x84, 0x84, 0x52, 0x06, 0x22, 0x01, 0x57, 0x01, 0x56, 0x05, 0x84,
0x01, 0x56, 0x01, 0x52, 0x16, 0x22, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x11,
0x70, 0x60, 0x70, 0x2C, 0x60, 0x60, 0x60, 0x1D, 0x82, 0x2C, 0x60, 0x2C, 0x82, 0x1D, 0x60, 0x60,
0x60, 0x2C, 0x1D, 0x60, 0x82, 0x11, 0x70, 0x60, 0x1D, 0x64, 0x11, 0x70, 0x64, 0x82, 0x1D, 0x2C,
0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F,
0x01, 0x33, 0x29, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x9E, 0x22, 0x00, 0x05, 0x4E, 0x4F,
0x4F, 0x5E, 0x4E, 0x00, 0x18, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82, 0x00, 0x03,
0x1F, 0x12, 0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x01, 0x33, 0x29, 0x07,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0xBB, 0x22, 0x00, 0x04, 0x2D, 0x22, 0x3A, 0x5B, 0x29, 0x1B,
0x00, 0x03, 0x1F, 0x12, 0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x09, 0x22, 0x01, 0x1F, 0x2C, 0x30,
0x01, 0x22, 0x01, 0x2D, 0xBB, 0x22, 0x01, 0x2D, 0x01, 0x22, 0x2C, 0x30, 0x01, 0x12, 0x01, 0x48,
0x09, 0x22, 0x00, 0x00, 0x08, 0x22, 0x01, 0x4B, 0x01, 0x18, 0x2B, 0x1F, 0x00, 0x03, 0x12, 0x22,
0x36, 0x00, 0xBB, 0x22, 0x00, 0x03, 0x2D, 0x22, 0x47, 0x00, 0x2A, 0x1F, 0x00, 0x03, 0x39, 0x18,
0x48, 0x00, 0x09, 0x22, 0x00, 0x00, 0x08, 0x22, 0x01, 0x2D, 0x01, 0x4B, 0x2B, 0x22, 0x01, 0x45,
0x01, 0x20, 0xBD, 0x22, 0x01, 0x20, 0x01, 0x45, 0x2B, 0x22, 0x01, 0x4B, 0x01, 0x36, 0x09, 0x22,
0x00, 0x00, 0x1A, 0x22, 0x01, 0x4E, 0x0E, 0x84, 0x01, 0x4D, 0xD5, 0x22, 0x01, 0x50, 0x0D, 0x84,
0x01, 0x50, 0x1E, 0x22, 0x00, 0x00, 0x1B, 0x22, 0x01, 0x4D, 0x0E, 0x84, 0x01, 0x5E, 0xD3, 0x22,
0x01, 0x4D, 0x0E, 0x84, 0x01, 0x4F, 0x1E, 0x22, 0x00, 0x00, 0x1B, 0x22, 0x01, 0x4E, 0x0E, 0x84,
0x01, 0x50, 0xD2, 0x22, 0x01, 0x5E, 0x0E, 0x84, 0x01, 0x56, 0x1F, 0x22, 0x00, 0x00, 0x1C, 0x22,
0x01, 0x4D, 0x0E, 0x84, 0x01, 0x59, 0xD0, 0x22, 0x01, 0x57, 0x01, 0x50, 0x0E, 0x84, 0x01, 0x52,
0x1F, 0x22, 0x00, 0x00, 0x1D, 0x22, 0x0F, 0x84, 0x01, 0x5A, 0xCF, 0x22, 0x01, 0x59, 0x0E, 0x84,
0x01, 0x59, 0x20, 0x22, 0x00, 0x00, 0x1D, 0x22, 0x01, 0x5A, 0x0F, 0x84, 0x01, 0x52, 0xCD, 0x22,
0x01, 0x58, 0x0F, 0x84, 0x01, 0x4E, 0x20, 0x22, 0x00, 0x00, 0x1E, 0x22, 0x01, 0x50, 0x0E, 0x84,
0x01, 0x50, 0x01, 0x57, 0xCB, 0x22, 0x01, 0x4F, 0x0F, 0x84, 0x01, 0x5D, 0x21, 0x22, 0x00, 0x00,
0x1E, 0x22, 0x01, 0x5C, 0x0F, 0x84, 0x01, 0x50, 0xCA, 0x22, 0x01, 0x52, 0x0F, 0x84, 0x01, 0x50,
0x22, 0x22, 0x00, 0x00, 0x1F, 0x22, 0x01, 0x5D, 0x0F, 0x84, 0x01, 0x59, 0xC8, 0x22, 0x01, 0x57,
0x10, 0x84, 0x01, 0x5C, 0x22, 0x22, 0x00, 0x00, 0x20, 0x22, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x59,
0xC6, 0x22, 0x01, 0x57, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x5D, 0x23, 0x22, 0x00, 0x00, 0x20, 0x22,
0x01, 0x4E, 0x10, 0x84, 0x01, 0x59, 0xC4, 0x22, 0x01, 0x57, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x50,
0x24, 0x22, 0x00, 0x00, 0x21, 0x22, 0x01, 0x5A, 0x10, 0x84, 0x01, 0x59, 0xC2, 0x22, 0x01, 0x57,
0x01, 0x50, 0x10, 0x84, 0x01, 0x4E, 0x24, 0x22, 0x00, 0x00, 0x22, 0x22, 0x01, 0x59, 0x10, 0x84,
0x01, 0x59, 0xC0, 0x22, 0x01, 0x57, 0x01, 0x50, 0x10, 0x84, 0x01, 0x4F, 0x25, 0x22, 0x00, 0x00,
0x23, 0x22, 0x01, 0x50, 0x10, 0x84, 0x01, 0x59, 0xBE, 0x22, 0x01, 0x4E, 0x01, 0x50, 0x10, 0x84,
0x01, 0x5D, 0x26, 0x22, 0x00, 0x00, 0x23, 0x22, 0x01, 0x57, 0x11, 0x84, 0x01, 0x56, 0x01, 0x57,
0xBB, 0x22, 0x01, 0x52, 0x11, 0x84, 0x01, 0x59, 0x27, 0x22, 0x00, 0x00, 0x24, 0x22, 0x01, 0x52,
0x11, 0x84, 0x01, 0x50, 0x01, 0x4E, 0xB9, 0x22, 0x01, 0x4F, 0x11, 0x84, 0x01, 0x50, 0x28, 0x22,
0x00, 0x00, 0x25, 0x22, 0x01, 0x4F, 0x12, 0x84, 0x01, 0x52, 0xB7, 0x22, 0x01, 0x58, 0x11, 0x84,
0x01, 0x50, 0x01, 0x57, 0x28, 0x22, 0x00, 0x00, 0x26, 0x22, 0x01, 0x58, 0x12, 0x84, 0x01, 0x58,
0xB5, 0x22, 0x01, 0x59, 0x12, 0x84, 0x01, 0x52, 0x29, 0x22, 0x00, 0x00, 0x27, 0x22, 0x01, 0x58,
0x12, 0x84, 0x01, 0x59, 0xB2, 0x22, 0x01, 0x5C, 0x01, 0x50, 0x12, 0x84, 0x01, 0x52, 0x2A, 0x22,
0x00, 0x00, 0x28, 0x22, 0x01, 0x58, 0x12, 0x84, 0x01, 0x50, 0x01, 0x5C, 0xAF, 0x22, 0x01, 0x5A,
0x13, 0x84, 0x01, 0x52, 0x2B, 0x22, 0x00, 0x00, 0x29, 0x22, 0x01, 0x58, 0x13, 0x84, 0x01, 0x5A,
0xAC, 0x22, 0x01, 0x57, 0x01, 0x59, 0x13, 0x84, 0x01, 0x52, 0x2C, 0x22, 0x00, 0x00, 0x2A, 0x22,
0x01, 0x58, 0x13, 0x84, 0x01, 0x56, 0x01, 0x4E, 0xA9, 0x22, 0x01, 0x5E, 0x01, 0x50, 0x13, 0x84,
0x01, 0x52, 0x2D, 0x22, 0x00, 0x00, 0x2B, 0x22, 0x01, 0x58, 0x14, 0x84, 0x01, 0x5A, 0xA7, 0x22,
0x01, 0x4D, 0x14, 0x84, 0x01, 0x52, 0x2E, 0x22, 0x00, 0x00, 0x2C, 0x22, 0x01, 0x58, 0x14, 0x84,
0x01, 0x56, 0x01, 0x4E, 0xA3, 0x22, 0x01, 0x4F, 0x01, 0x50, 0x13, 0x84, 0x01, 0x50, 0x01, 0x52,
0x2F, 0x22, 0x00, 0x00, 0x2D, 0x22, 0x01, 0x52, 0x15, 0x84, 0x01, 0x5D, 0x32, 0x22, 0x01, 0x0D,
0x3C, 0x4B, 0x01, 0x06, 0x30, 0x22, 0x01, 0x4E, 0x01, 0x59, 0x14, 0x84, 0x01, 0x50, 0x01, 0x57,
0x30, 0x22, 0x00, 0x00, 0x2E, 0x22, 0x01, 0x52, 0x01, 0x50, 0x14, 0x84, 0x01, 0x50, 0x01, 0x4F,
0x2F, 0x22, 0x00, 0x03, 0x28, 0x4B, 0x6C, 0x00, 0x3A, 0x0E, 0x00, 0x03, 0x71, 0x4B, 0x28, 0x00,
0x2E, 0x22, 0x01, 0x58, 0x15, 0x84, 0x01, 0x59, 0x01, 0x57, 0x31, 0x22, 0x00, 0x00, 0x2F, 0x22,
0x01, 0x57, 0x01, 0x50, 0x15, 0x84, 0x01, 0x56, 0x01, 0x52, 0x2D, 0x22, 0x00, 0x03, 0x00, 0x4B,
0x43, 0x00, 0x3A, 0x0A, 0x00, 0x03, 0x43, 0x4B, 0x4A, 0x00, 0x2C, 0x22, 0x01, 0x4F, 0x01, 0x50,
0x15, 0x84, 0x01, 0x4D, 0x33, 0x22, 0x00, 0x00, 0x31, 0x22, 0x01, 0x59, 0x16, 0x84, 0x01, 0x4D,
0x01, 0x4E, 0x2B, 0x22, 0x00, 0x04, 0x28, 0x4B, 0x62, 0x30, 0x05, 0x4C, 0x01, 0x2E, 0x01, 0x30,
0x18, 0x4C, 0x01, 0x2E, 0x01, 0x04, 0x04, 0x4C, 0x01, 0x39, 0x01, 0x04, 0x07, 0x4C, 0x01, 0x04,
0x01, 0x2E, 0x09, 0x4C, 0x00, 0x03, 0x30, 0x3F, 0x4A, 0x00, 0x2A, 0x22, 0x01, 0x52, 0x01, 0x50,
0x16, 0x84, 0x01, 0x5A, 0x34, 0x22, 0x00, 0x00, 0x32, 0x22, 0x01, 0x5A, 0x17, 0x84, 0x01, 0x4D,
0x01, 0x4E, 0x2A, 0x22, 0x00, 0x04, 0x4B, 0x2A, 0x30, 0x78, 0x04, 0x15, 0x00, 0x03, 0x4A, 0x4C,
0x75, 0x00, 0x17, 0x15, 0x00, 0x09, 0x01, 0x78, 0x0D, 0x15, 0x15, 0x15, 0x12, 0x39, 0x06, 0x00,
0x05, 0x15, 0x00, 0x03, 0x21, 0x2E, 0x78, 0x00, 0x08, 0x15, 0x00, 0x04, 0x0A, 0x30, 0x75, 0x06,
0x28, 0x22, 0x01, 0x52, 0x01, 0x56, 0x16, 0x84, 0x01, 0x50, 0x01, 0x5C, 0x35, 0x22, 0x00, 0x00,
0x33, 0x22, 0x01, 0x5C, 0x01, 0x50, 0x17, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x28, 0x22, 0x00, 0x0F,
0x3B, 0x75, 0x30, 0x2A, 0x62, 0x30, 0x30, 0x32, 0x15, 0x15, 0x23, 0x30, 0x30, 0x30, 0x02, 0x00,
0x0E, 0x30, 0x00, 0x22, 0x1C, 0x04, 0x30, 0x30, 0x3A, 0x15, 0x15, 0x23, 0x30, 0x30, 0x30, 0x4C,
0x2A, 0x02, 0x30, 0x23, 0x30, 0x02, 0x30, 0x2E, 0x2E, 0x12, 0x30, 0x30, 0x30, 0x32, 0x32, 0x30,
0x02, 0x30, 0x31, 0x30, 0x4B, 0x15, 0x26, 0x22, 0x01, 0x52, 0x01, 0x56, 0x17, 0x84, 0x01, 0x59,
0x37, 0x22, 0x00, 0x00, 0x35, 0x22, 0x01, 0x59, 0x18, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x26, 0x22,
0x00, 0x3F, 0x37, 0x4B, 0x04, 0x04, 0x39, 0x30, 0x30, 0x30, 0x32, 0x3D, 0x3D, 0x1C, 0x30, 0x04,
0x1C, 0x04, 0x30, 0x30, 0x04, 0x30, 0x32, 0x30, 0x30, 0x32, 0x30, 0x32, 0x30, 0x32, 0x3A, 0x30,
0x44, 0x30, 0x32, 0x30, 0x44, 0x44, 0x42, 0x30, 0x30, 0x30, 0x4C, 0x2E, 0x3F, 0x4C, 0x3F, 0x30,
0x7A, 0x4C, 0x7A, 0x30, 0x12, 0x30, 0x32, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x4C, 0x02, 0x4B,
0x1E, 0x00, 0x24, 0x22, 0x01, 0x5E, 0x01, 0x56, 0x18, 0x84, 0x01, 0x5A, 0x38, 0x22, 0x00, 0x00,
0x36, 0x22, 0x01, 0x4F, 0x19, 0x84, 0x01, 0x56, 0x01, 0x52, 0x25, 0x22, 0x00, 0x23, 0x71, 0x4C,
0x30, 0x2A, 0x30, 0x30, 0x1C, 0x02, 0x2E, 0x32, 0x42, 0x3A, 0x1C, 0x1C, 0x1C, 0x04, 0x3A, 0x1C,
0x32, 0x1C, 0x32, 0x30, 0x32, 0x42, 0x1C, 0x42, 0x3A, 0x04, 0x30, 0x1C, 0x32, 0x1C, 0x32, 0x30,
0x04, 0x00, 0x04, 0x30, 0x00, 0x16, 0x4C, 0x4C, 0x15, 0x15, 0x23, 0x02, 0x3D, 0x15, 0x0A, 0x30,
0x3B, 0x30, 0x02, 0x30, 0x32, 0x3A, 0x30, 0x02, 0x30, 0x31, 0x31, 0x4B, 0x23, 0x22, 0x01, 0x4F,
0x01, 0x50, 0x18, 0x84, 0x01, 0x50, 0x01, 0x4E, 0x39, 0x22, 0x00, 0x00, 0x37, 0x22, 0x01, 0x57,
0x01, 0x59, 0x19, 0x84, 0x01, 0x50, 0x01, 0x5A, 0x23, 0x22, 0x00, 0x3D, 0x0D, 0x6C, 0x30, 0x39,
0x30, 0x30, 0x30, 0x02, 0x44, 0x30, 0x04, 0x3A, 0x42, 0x1C, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x3A,
0x44, 0x30, 0x04, 0x1C, 0x32, 0x1C, 0x1C, 0x44, 0x30, 0x32, 0x1C, 0x32, 0x1C, 0x3A, 0x44, 0x30,
0x42, 0x30, 0x30, 0x4C, 0x4C, 0x44, 0x32, 0x27, 0x32, 0x27, 0x32, 0x49, 0x30, 0x12, 0x30, 0x27,
0x30, 0x44, 0x30, 0x32, 0x04, 0x30, 0x4C, 0x4C, 0x71, 0x00, 0x20, 0x22, 0x01, 0x4E, 0x01, 0x58,
0x1A, 0x84, 0x01, 0x5D, 0x3B, 0x22, 0x00, 0x00, 0x39, 0x22, 0x01, 0x4F, 0x1B, 0x84, 0x01, 0x5D,
0x01, 0x5C, 0x20, 0x22, 0x00, 0x3D, 0x1E, 0x4B, 0x02, 0x04, 0x31, 0x30, 0x02, 0x1C, 0x02, 0x04,
0x32, 0x23, 0x1C, 0x2E, 0x30, 0x44, 0x02, 0x32, 0x23, 0x30, 0x27, 0x04, 0x32, 0x02, 0x32, 0x31,
0x1C, 0x27, 0x32, 0x32, 0x2E, 0x32, 0x3D, 0x30, 0x23, 0x32, 0x1C, 0x30, 0x30, 0x4C, 0x4C, 0x04,
0x30, 0x3D, 0x30, 0x3D, 0x30, 0x39, 0x30, 0x4C, 0x30, 0x3D, 0x30, 0x1F, 0x30, 0x02, 0x04, 0x62,
0x31, 0x3F, 0x4A, 0x00, 0x1E, 0x22, 0x01, 0x5E, 0x01, 0x56, 0x1A, 0x84, 0x01, 0x50, 0x01, 0x5C,
0x3C, 0x22, 0x00, 0x00, 0x3A, 0x22, 0x01, 0x57, 0x01, 0x4D, 0x1B, 0x84, 0x00, 0x03, 0x56, 0x5A,
0x57, 0x00, 0x1E, 0x22, 0x00, 0x3C, 0x48, 0x7A, 0x30, 0x12, 0x04, 0x4C, 0x04, 0x04, 0x31, 0x2E,
0x23, 0x04, 0x23, 0x04, 0x04, 0x23, 0x04, 0x23, 0x73, 0x39, 0x02, 0x04, 0x23, 0x04, 0x73, 0x04,
0x02, 0x02, 0x3D, 0x12, 0x04, 0x73, 0x04, 0x02, 0x02, 0x04, 0x04, 0x04, 0x47, 0x4C, 0x27, 0x04,
0x39, 0x04, 0x39, 0x04, 0x39, 0x30, 0x62, 0x30, 0x2E, 0x30, 0x2E, 0x30, 0x04, 0x04, 0x04, 0x62,
0x75, 0x06, 0x1B, 0x22, 0x01, 0x5C, 0x01, 0x58, 0x1C, 0x84, 0x01, 0x5A, 0x3E, 0x22, 0x00, 0x00,
0x3C, 0x22, 0x01, 0x5E, 0x01, 0x50, 0x1C, 0x84, 0x01, 0x59, 0x01, 0x5E, 0x1C, 0x22, 0x00, 0x2F,
0x06, 0x71, 0x2E, 0x0D, 0x62, 0x1F, 0x2A, 0x2E, 0x31, 0x47, 0x62, 0x3B, 0x62, 0x73, 0x02, 0x62,
0x12, 0x62, 0x47, 0x3B, 0x62, 0x47, 0x62, 0x1F, 0x73, 0x62, 0x3B, 0x62, 0x49, 0x7A, 0x62, 0x47,
0x62, 0x1F, 0x1F, 0x62, 0x47, 0x62, 0x7A, 0x7A, 0x2E, 0x44, 0x4C, 0x62, 0x12, 0x62, 0x7A, 0x00,
0x0B, 0x2E, 0x01, 0x4B, 0x01, 0x15, 0x18, 0x22, 0x00, 0x03, 0x57, 0x5A, 0x56, 0x00, 0x1C, 0x84,
0x01, 0x59, 0x01, 0x4E, 0x3F, 0x22, 0x00, 0x00, 0x3E, 0x22, 0x01, 0x58, 0x1E, 0x84, 0x01, 0x59,
0x01, 0x5E, 0x1A, 0x22, 0x01, 0x4A, 0x38, 0x4B, 0x01, 0x3B, 0x16, 0x22, 0x00, 0x03, 0x57, 0x5A,
0x56, 0x00, 0x1D, 0x84, 0x01, 0x50, 0x01, 0x5E, 0x41, 0x22, 0x00, 0x00, 0x3F, 0x22, 0x01, 0x57,
0x01, 0x4D, 0x1F, 0x84, 0x00, 0x03, 0x59, 0x4F, 0x57, 0x00, 0x18, 0x22, 0x00, 0x2C, 0x02, 0x00,
0x49, 0x36, 0x03, 0x03, 0x15, 0x00, 0x15, 0x06, 0x00, 0x49, 0x49, 0x49, 0x4B, 0x47, 0x49, 0x78,
0x47, 0x78, 0x78, 0x7A, 0x78, 0x7A, 0x78, 0x47, 0x2A, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x47,
0x78, 0x47, 0x46, 0x12, 0x06, 0x00, 0x06, 0x49, 0x06, 0x37, 0x1F, 0x22, 0x00, 0x03, 0x5C, 0x5A,
0x56, 0x00, 0x1F, 0x84, 0x01, 0x5A, 0x43, 0x22, 0x00, 0x00, 0x41, 0x22, 0x01, 0x4E, 0x01, 0x56,
0x20, 0x84, 0x00, 0x03, 0x56, 0x58, 0x5C, 0x00, 0x18, 0x22, 0x0A, 0x2D, 0x01, 0x00, 0x01, 0x46,
0x15, 0x49, 0x00, 0x03, 0x18, 0x0D, 0x23, 0x00, 0x09, 0x2D, 0x18, 0x22, 0x01, 0x5E, 0x01, 0x5D,
0x21, 0x84, 0x01, 0x58, 0x45, 0x22, 0x00, 0x00, 0x43, 0x22, 0x01, 0x52, 0x01, 0x56, 0x22, 0x84,
0x00, 0x03, 0x59, 0x5A, 0x5C, 0x00, 0x13, 0x22, 0x01, 0x48, 0x2D, 0x22, 0x01, 0x46, 0x13, 0x22,
0x00, 0x03, 0x52, 0x58, 0x56, 0x00, 0x22, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x46, 0x22, 0x00, 0x00,
0x45, 0x22, 0x01, 0x52, 0x01, 0x56, 0x24, 0x84, 0x00, 0x03, 0x59, 0x5A, 0x52, 0x00, 0x10, 0x22,
0x01, 0x39, 0x2B, 0x30, 0x00, 0x03, 0x44, 0x22, 0x00, 0x00, 0x0D, 0x22, 0x00, 0x04, 0x57, 0x5E,
0x58, 0x56, 0x24, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x48, 0x22, 0x00, 0x00, 0x47, 0x22, 0x01, 0x52,
0x01, 0x56, 0x26, 0x84, 0x00, 0x04, 0x50, 0x4D, 0x4F, 0x5C, 0x0B, 0x22, 0x01, 0x1F, 0x01, 0x7B,
0x29, 0x54, 0x00, 0x05, 0x7B, 0x30, 0x22, 0x00, 0x05, 0x00, 0x07, 0x22, 0x00, 0x04, 0x57, 0x52,
0x5A, 0x4D, 0x27, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x4A, 0x22, 0x00, 0x00, 0x49, 0x22, 0x01, 0x52,
0x01, 0x59, 0x2A, 0x84, 0x00, 0x04, 0x4D, 0x58, 0x4F, 0x4E, 0x05, 0x22, 0x01, 0x1F, 0x01, 0x54,
0x29, 0x81, 0x00, 0x0B, 0x54, 0x30, 0x22, 0x15, 0x36, 0x22, 0x4E, 0x5C, 0x4F, 0x5D, 0x59, 0x00,
0x2A, 0x84, 0x01, 0x58, 0x01, 0x57, 0x4C, 0x22, 0x00, 0x00, 0x4B, 0x22, 0x01, 0x4E, 0x01, 0x5D,
0x2E, 0x84, 0x00, 0x05, 0x59, 0x4D, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81, 0x00, 0x06, 0x54, 0x30,
0x22, 0x2F, 0x29, 0x3C, 0x2C, 0x84, 0x01, 0x50, 0x01, 0x5A, 0x4F, 0x22, 0x00, 0x00, 0x4E, 0x22,
0x01, 0x5A, 0x01, 0x50, 0x2D, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x25,
0x07, 0x17, 0x01, 0x08, 0x01, 0x66, 0x11, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x3C,
0x2A, 0x84, 0x01, 0x56, 0x01, 0x52, 0x51, 0x22, 0x00, 0x00, 0x50, 0x22, 0x01, 0x52, 0x01, 0x4D,
0x2B, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x09, 0x85, 0x01, 0x5F,
0x01, 0x66, 0x0F, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x41, 0x28, 0x84, 0x01, 0x58,
0x01, 0x4E, 0x53, 0x22, 0x00, 0x00, 0x53, 0x22, 0x01, 0x5A, 0x01, 0x56, 0x28, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85, 0x01, 0x65, 0x01, 0x25, 0x0E, 0x81,
0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x41, 0x25, 0x84, 0x01, 0x59, 0x01, 0x5E, 0x56, 0x22,
0x00, 0x00, 0x55, 0x22, 0x00, 0x03, 0x5C, 0x58, 0x50, 0x00, 0x25, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x54, 0x00, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85, 0x85, 0x85, 0x76, 0x17, 0x17, 0x13, 0x04, 0x85,
0x01, 0x5F, 0x0E, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x22, 0x84, 0x01, 0x56,
0x01, 0x5A, 0x59, 0x22, 0x00, 0x00, 0x58, 0x22, 0x01, 0x52, 0x01, 0x5D, 0x23, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x09, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x81, 0x81,
0x17, 0x00, 0x04, 0x85, 0x01, 0x25, 0x0D, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29,
0x1F, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x57, 0x00, 0x5B, 0x22, 0x00, 0x00, 0x5B, 0x22, 0x00, 0x03,
0x5C, 0x58, 0x50, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x05,
0x08, 0x85, 0x85, 0x85, 0x5F, 0x00, 0x04, 0x81, 0x04, 0x85, 0x01, 0x08, 0x0D, 0x81, 0x00, 0x07,
0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x3C, 0x00, 0x1B, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x57, 0x00,
0x5E, 0x22, 0x00, 0x00, 0x5E, 0x22, 0x00, 0x03, 0x4E, 0x5A, 0x59, 0x00, 0x1C, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x05, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x00, 0x04, 0x81,
0x00, 0x05, 0x5F, 0x85, 0x85, 0x85, 0x08, 0x00, 0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x41, 0x00, 0x18, 0x84, 0x01, 0x4D, 0x01, 0x5E, 0x62, 0x22, 0x00, 0x00, 0x62, 0x22,
0x00, 0x03, 0x52, 0x58, 0x50, 0x00, 0x18, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81,
0x00, 0x05, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x00, 0x04, 0x81, 0x04, 0x85, 0x01, 0x08, 0x0D, 0x81,
0x00, 0x07, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x41, 0x00, 0x14, 0x84, 0x00, 0x03, 0x59, 0x5A,
0x5C, 0x00, 0x65, 0x22, 0x00, 0x00, 0x65, 0x22, 0x00, 0x04, 0x57, 0x5E, 0x5D, 0x56, 0x14, 0x84,
0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x0E, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81,
0x81, 0x81, 0x13, 0x85, 0x85, 0x85, 0x65, 0x66, 0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x29, 0x00, 0x10, 0x84, 0x00, 0x03, 0x59, 0x5A, 0x5C, 0x00, 0x69, 0x22, 0x00, 0x00,
0x6A, 0x22, 0x00, 0x03, 0x52, 0x5A, 0x4D, 0x00, 0x10, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00,
0x0E, 0x81, 0x00, 0x08, 0x08, 0x85, 0x85, 0x85, 0x76, 0x17, 0x13, 0x72, 0x04, 0x85, 0x01, 0x17,
0x0E, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x00, 0x0B, 0x84, 0x00, 0x04,
0x50, 0x4D, 0x4F, 0x4E, 0x6D, 0x22, 0x00, 0x00, 0x6E, 0x22, 0x00, 0x05, 0x57, 0x52, 0x5A, 0x4D,
0x50, 0x00, 0x0A, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85,
0x01, 0x13, 0x0F, 0x81, 0x00, 0x08, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x05, 0x84,
0x00, 0x04, 0x56, 0x4D, 0x4F, 0x5C, 0x72, 0x22, 0x00, 0x00, 0x74, 0x22, 0x00, 0x05, 0x4E, 0x5E,
0x5A, 0x4D, 0x56, 0x00, 0x04, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08,
0x09, 0x85, 0x01, 0x17, 0x10, 0x81, 0x00, 0x0C, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x7F,
0x4D, 0x4F, 0x52, 0x4E, 0x77, 0x22, 0x00, 0x00, 0x7A, 0x22, 0x00, 0x06, 0x57, 0x4E, 0x5E, 0x22,
0x1F, 0x54, 0x0E, 0x81, 0x00, 0x0C, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x66, 0x17, 0x85, 0x85,
0x85, 0x17, 0x0F, 0x81, 0x00, 0x08, 0x54, 0x30, 0x22, 0x33, 0x3E, 0x22, 0x22, 0x03, 0x7B, 0x22,
0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x0E, 0x81, 0x00, 0x0C, 0x08, 0x85, 0x85, 0x85,
0x5F, 0x81, 0x81, 0x81, 0x85, 0x85, 0x85, 0x65, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00,
0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85,
0x85, 0x85, 0x5F, 0x81, 0x81, 0x66, 0x04, 0x85, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x15,
0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85,
0x85, 0x85, 0x72, 0x08, 0x08, 0x5F, 0x04, 0x85, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00,
0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85,
0x01, 0x5F, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22,
0x01, 0x1F, 0x01, 0x54, 0x0E, 0x81, 0x01, 0x08, 0x09, 0x85, 0x01, 0x72, 0x01, 0x66, 0x0F, 0x81,
0x00, 0x04, 0x54, 0x30, 0x22, 0x15, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54,
0x0E, 0x81, 0x01, 0x25, 0x07, 0x17, 0x01, 0x08, 0x01, 0x25, 0x11, 0x81, 0x00, 0x04, 0x54, 0x30,
0x22, 0x00, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x29, 0x81, 0x00, 0x04,
0x54, 0x30, 0x22, 0x00, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81,
0x00, 0x21, 0x25, 0x08, 0x08, 0x66, 0x81, 0x81, 0x08, 0x25, 0x81, 0x08, 0x66, 0x81, 0x81, 0x08,
0x25, 0x81, 0x08, 0x25, 0x81, 0x25, 0x08, 0x66, 0x81, 0x66, 0x08, 0x25, 0x81, 0x81, 0x08, 0x66,
0x81, 0x81, 0x08, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x15, 0x7F, 0x22, 0x00, 0x00,
0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81, 0x00, 0x21, 0x85, 0x85, 0x85, 0x65, 0x08, 0x81,
0x85, 0x5F, 0x81, 0x65, 0x13, 0x81, 0x25, 0x85, 0x13, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08,
0x08, 0x65, 0x76, 0x85, 0x13, 0x81, 0x85, 0x08, 0x81, 0x13, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04,
0x54, 0x30, 0x22, 0x00, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81,
0x00, 0x21, 0x25, 0x81, 0x25, 0x85, 0x5F, 0x81, 0x85, 0x5F, 0x81, 0x13, 0x65, 0x5F, 0x76, 0x85,
0x25, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08, 0x72, 0x76, 0x81, 0x17, 0x85, 0x08, 0x85, 0x08,
0x08, 0x85, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x0C, 0x7F, 0x22, 0x00, 0x00,
0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81, 0x00, 0x21, 0x66, 0x13, 0x65, 0x85, 0x17, 0x81,
0x85, 0x5F, 0x81, 0x25, 0x85, 0x17, 0x65, 0x72, 0x81, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08,
0x85, 0x5F, 0x81, 0x08, 0x85, 0x17, 0x85, 0x13, 0x85, 0x65, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04,
0x54, 0x30, 0x22, 0x2D, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81,
0x00, 0x21, 0x13, 0x85, 0x5F, 0x08, 0x81, 0x81, 0x85, 0x5F, 0x81, 0x81, 0x76, 0x72, 0x85, 0x08,
0x81, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08, 0x65, 0x5F, 0x81, 0x08, 0x85, 0x17, 0x85, 0x85,
0x72, 0x08, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x22, 0x00, 0x00,
0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81, 0x00, 0x21, 0x5F, 0x85, 0x08, 0x17, 0x25, 0x08,
0x85, 0x72, 0x08, 0x81, 0x17, 0x85, 0x85, 0x66, 0x25, 0x08, 0x85, 0x13, 0x08, 0x17, 0x85, 0x08,
0x13, 0x65, 0x08, 0x5F, 0x85, 0x25, 0x85, 0x65, 0x25, 0x08, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04,
0x54, 0x30, 0x22, 0x2D, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x04, 0x81,
0x00, 0x05, 0x25, 0x5F, 0x5F, 0x5F, 0x08, 0x00, 0x04, 0x5F, 0x00, 0x06, 0x81, 0x25, 0x5F, 0x17,
0x81, 0x08, 0x04, 0x5F, 0x00, 0x0E, 0x08, 0x5F, 0x25, 0x66, 0x13, 0x5F, 0x5F, 0x08, 0x81, 0x5F,
0x25, 0x81, 0x25, 0x5F, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x22, 0x00, 0x00,
0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x29, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x22,
0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x54, 0x29, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D,
0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x1F, 0x01, 0x44, 0x29, 0x1F, 0x00, 0x04, 0x44, 0x30,
0x22, 0x2D, 0x7F, 0x22, 0x00, 0x00, 0x7E, 0x22, 0x01, 0x01, 0x2B, 0x1F, 0x00, 0x03, 0x3F, 0x22,
0x03, 0x00, 0x7F, 0x22, 0x00, 0x00, 0x7D, 0x22, 0x01, 0x15, 0x01, 0x45, 0x2C, 0x22, 0x01, 0x21,
0x80, 0x22, 0x00, 0x00, 0xFF, 0x22, 0x2D, 0x22, 0x00, 0x00, 0xFF, 0x22, 0x2D, 0x22, 0x00, 0x00,
0xFF, 0x22, 0x2D, 0x22, 0x00, 0x01, 0x00, 0x00,
};
#ifdef ROMFS_DIRENTRY_HEAD
static const ROMFS_DIRENTRY token_dir = { 0, 0, ROMFS_DIRENTRY_HEAD, "token.bmp", 13800, token };
#undef ROMFS_DIRENTRY_HEAD
#define ROMFS_DIRENTRY_HEAD &token_dir
#endif

928
resources/token_w.h Normal file
View File

@ -0,0 +1,928 @@
/**
* File generated by the uGFX-Sudio
*
* Original image file: C:/test_joel/studio/tokenring/resources/token_w.bmp
*/
static const char token_w[] = {
0x42, 0x4D, 0x1C, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x02, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00,
0x00, 0x00, 0xCE, 0x36, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x86, 0x00,
0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x96, 0x96, 0x96, 0x00, 0x50, 0x59, 0x57, 0x00, 0xBA, 0xC7,
0xC8, 0x00, 0xE5, 0xE5, 0xE5, 0x00, 0xC5, 0xD6, 0xD6, 0x00, 0xD9, 0xD9, 0xD9, 0x00, 0x87, 0x88,
0x88, 0x00, 0x99, 0x26, 0x00, 0x00, 0x6B, 0x6B, 0xD9, 0x00, 0xD7, 0x62, 0x3A, 0x00, 0x60, 0x63,
0x63, 0x00, 0xAA, 0xE9, 0xAA, 0x00, 0xA3, 0xA3, 0xA3, 0x00, 0x79, 0x7B, 0x7A, 0x00, 0x42, 0x46,
0x44, 0x00, 0x6E, 0xDA, 0x6E, 0x00, 0xCB, 0xF2, 0xCB, 0x00, 0x3B, 0xB1, 0xFF, 0x00, 0x6E, 0x77,
0x77, 0x00, 0xAB, 0xAB, 0xE9, 0x00, 0x7C, 0xCB, 0xFF, 0x00, 0x9D, 0xA2, 0xA3, 0x00, 0xE4, 0x95,
0x7A, 0x00, 0x97, 0x97, 0xE4, 0x00, 0x37, 0x3A, 0x3A, 0x00, 0xF3, 0xF3, 0xF3, 0x00, 0x98, 0xE5,
0x98, 0x00, 0x00, 0x72, 0xBF, 0x00, 0xD2, 0xE4, 0xE5, 0x00, 0x95, 0xD4, 0xFF, 0x00, 0xCB, 0xCB,
0xCB, 0x00, 0xA3, 0xB2, 0xB3, 0x00, 0x6E, 0x6E, 0x6E, 0x00, 0x7E, 0x83, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0xAC, 0xB6, 0xB6, 0x00, 0xDD, 0x79, 0x58, 0x00, 0x54, 0x54, 0xD4, 0x00, 0xEA, 0xAF,
0x9B, 0x00, 0xB3, 0xBE, 0xBF, 0x00, 0xB0, 0xB0, 0xB0, 0x00, 0xD0, 0x53, 0x53, 0x00, 0x8A, 0x97,
0x96, 0x00, 0x54, 0xD4, 0x54, 0x00, 0x59, 0xBC, 0xFF, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xAC, 0xBC,
0xBC, 0x00, 0x9B, 0x4F, 0x3C, 0x00, 0xDA, 0xEE, 0xEF, 0x00, 0xA1, 0xB0, 0xAF, 0x00, 0xCA, 0xDB,
0xDC, 0x00, 0x9F, 0x83, 0x78, 0x00, 0x92, 0x74, 0x68, 0x00, 0xFB, 0xFB, 0xFB, 0x00, 0xCF, 0xCF,
0xCF, 0x00, 0xBD, 0xBD, 0xBD, 0x00, 0x2B, 0x2B, 0x2B, 0x00, 0x96, 0xA3, 0xA3, 0x00, 0xD6, 0xE9,
0xEA, 0x00, 0x67, 0x6A, 0x69, 0x00, 0xF5, 0x62, 0x62, 0x00, 0x9F, 0xAA, 0xAA, 0x00, 0xCF, 0xB0,
0xB0, 0x00, 0x5C, 0x65, 0x64, 0x00, 0xD2, 0x6E, 0x6E, 0x00, 0xE6, 0x5B, 0x5B, 0x00, 0xCE, 0xDF,
0xE0, 0x00, 0x52, 0x53, 0x53, 0x00, 0xC1, 0xCF, 0xD0, 0x00, 0x14, 0x14, 0x14, 0x00, 0x2D, 0x31,
0x2F, 0x00, 0x7C, 0x85, 0x85, 0x00, 0x40, 0x41, 0x40, 0x00, 0x89, 0x8F, 0x8F, 0x00, 0x5A, 0x5E,
0x5D, 0x00, 0x23, 0x28, 0x25, 0x00, 0x7E, 0x8B, 0x8A, 0x00, 0xFF, 0x8C, 0x8C, 0x00, 0xFF, 0xD9,
0xD9, 0x00, 0xFF, 0xB3, 0xB3, 0x00, 0xFF, 0x70, 0x70, 0x00, 0xFF, 0xF6, 0xF6, 0x00, 0xFF, 0xC6,
0xC6, 0x00, 0xFF, 0xEC, 0xEC, 0x00, 0x79, 0x83, 0xAA, 0x00, 0x79, 0xAA, 0x84, 0x00, 0xFF, 0x79,
0x79, 0x00, 0xFF, 0xE3, 0xE3, 0x00, 0xFF, 0xA0, 0xA0, 0x00, 0xFF, 0x83, 0x83, 0x00, 0xFF, 0xA9,
0xA9, 0x00, 0x36, 0x88, 0xBB, 0x00, 0xFF, 0xD0, 0xD0, 0x00, 0xFF, 0x96, 0x96, 0x00, 0xFF, 0xBC,
0xBC, 0x00, 0xCA, 0xCA, 0xF2, 0x00, 0xBF, 0xE5, 0xFF, 0x00, 0xF2, 0xCC, 0xBF, 0x00, 0xCF, 0xE2,
0xE3, 0x00, 0xFB, 0xF2, 0xEF, 0x00, 0x0F, 0x9F, 0xFF, 0x00, 0xF2, 0xF2, 0xFB, 0x00, 0x3F, 0x3F,
0xCF, 0x00, 0xEF, 0xF8, 0xFF, 0x00, 0x1F, 0xA5, 0xFF, 0x00, 0xD1, 0x47, 0x18, 0x00, 0xF8, 0xE5,
0xDF, 0x00, 0xF2, 0xFB, 0xF2, 0x00, 0x39, 0x40, 0x3E, 0x00, 0xDF, 0xF2, 0xFF, 0x00, 0xF5, 0xD8,
0xCF, 0x00, 0x3F, 0xCF, 0x3F, 0x00, 0xAF, 0xDF, 0xFF, 0x00, 0x32, 0x34, 0x33, 0x00, 0xD8, 0xD8,
0xF5, 0x00, 0x9C, 0xA7, 0xA7, 0x00, 0xCF, 0xEB, 0xFF, 0x00, 0x48, 0x4E, 0x4B, 0x00, 0xE5, 0xE5,
0xF8, 0x00, 0xEF, 0xBF, 0xAF, 0x00, 0x69, 0x72, 0x71, 0x00, 0xE5, 0xF8, 0xE5, 0x00, 0x73, 0x7E,
0x7D, 0x00, 0xA6, 0xB5, 0xC0, 0x00, 0xCF, 0x91, 0x91, 0x00, 0xA6, 0xBF, 0xB6, 0x00, 0x5F, 0x8E,
0xA8, 0x00, 0xF0, 0x7B, 0x7B, 0x00, 0xCC, 0x33, 0x00, 0x00, 0x33, 0x33, 0xCC, 0x00, 0x00, 0x99,
0xFF, 0x00, 0x33, 0xCC, 0x33, 0x00, 0xFF, 0x66, 0x66, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x76, 0x85,
0x01, 0x05, 0x3C, 0x4A, 0x01, 0x1E, 0x78, 0x85, 0x00, 0x00, 0x75, 0x85, 0x01, 0x1E, 0x3E, 0x4B,
0x01, 0x1E, 0x77, 0x85, 0x00, 0x00, 0x75, 0x85, 0x00, 0x03, 0x00, 0x4B, 0x3B, 0x00, 0x3A, 0x21,
0x00, 0x03, 0x0A, 0x4B, 0x3B, 0x00, 0x77, 0x85, 0x00, 0x00, 0x75, 0x85, 0x00, 0x04, 0x00, 0x4B,
0x2E, 0x2E, 0x05, 0x4C, 0x01, 0x39, 0x01, 0x2E, 0x18, 0x4C, 0x01, 0x39, 0x01, 0x31, 0x04, 0x4C,
0x01, 0x2A, 0x01, 0x31, 0x07, 0x4C, 0x01, 0x31, 0x01, 0x39, 0x09, 0x4C, 0x00, 0x03, 0x2E, 0x3F,
0x4A, 0x00, 0x77, 0x85, 0x00, 0x00, 0x75, 0x85, 0x00, 0x05, 0x03, 0x4B, 0x31, 0x30, 0x01, 0x00,
0x04, 0x21, 0x00, 0x03, 0x4C, 0x30, 0x43, 0x00, 0x17, 0x21, 0x00, 0x09, 0x4C, 0x2E, 0x3B, 0x21,
0x21, 0x21, 0x78, 0x2E, 0x3B, 0x00, 0x05, 0x21, 0x00, 0x03, 0x3B, 0x2E, 0x78, 0x00, 0x08, 0x21,
0x00, 0x04, 0x43, 0x30, 0x01, 0x0D, 0x77, 0x85, 0x00, 0x00, 0x76, 0x85, 0x00, 0x0F, 0x75, 0x78,
0x30, 0x7A, 0x02, 0x02, 0x02, 0x27, 0x3B, 0x0A, 0x7A, 0x02, 0x02, 0x02, 0x23, 0x00, 0x0F, 0x02,
0x00, 0x21, 0x27, 0x02, 0x02, 0x02, 0x0A, 0x0A, 0x2A, 0x02, 0x02, 0x02, 0x7A, 0x4C, 0x31, 0x02,
0x3D, 0x02, 0x23, 0x02, 0x39, 0x2E, 0x12, 0x02, 0x02, 0x02, 0x27, 0x27, 0x02, 0x23, 0x02, 0x47,
0x30, 0x71, 0x00, 0x00, 0x77, 0x85, 0x00, 0x00, 0x76, 0x85, 0x00, 0x3F, 0x15, 0x4B, 0x62, 0x02,
0x02, 0x30, 0x30, 0x1C, 0x02, 0x15, 0x1F, 0x3A, 0x30, 0x42, 0x44, 0x42, 0x30, 0x30, 0x1C, 0x30,
0x1C, 0x30, 0x30, 0x1C, 0x30, 0x1C, 0x30, 0x1C, 0x30, 0x30, 0x04, 0x30, 0x1C, 0x30, 0x1F, 0x27,
0x44, 0x30, 0x30, 0x30, 0x4C, 0x62, 0x2A, 0x2E, 0x2A, 0x30, 0x3D, 0x2E, 0x39, 0x62, 0x12, 0x30,
0x1C, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x2A, 0x62, 0x4B, 0x1E, 0x00, 0x77, 0x85, 0x00, 0x00,
0x76, 0x85, 0x00, 0x24, 0x03, 0x4B, 0x39, 0x30, 0x2A, 0x30, 0x30, 0x3A, 0x32, 0x23, 0x23, 0x04,
0x30, 0x44, 0x3A, 0x44, 0x32, 0x30, 0x02, 0x1C, 0x44, 0x1C, 0x30, 0x44, 0x3A, 0x44, 0x1C, 0x04,
0x04, 0x30, 0x44, 0x1C, 0x44, 0x1C, 0x1C, 0x04, 0x04, 0x30, 0x00, 0x17, 0x4C, 0x4C, 0x0A, 0x0A,
0x47, 0x32, 0x21, 0x0A, 0x0E, 0x30, 0x12, 0x30, 0x02, 0x30, 0x32, 0x42, 0x30, 0x02, 0x30, 0x39,
0x2E, 0x4B, 0x05, 0x00, 0x77, 0x85, 0x00, 0x00, 0x77, 0x85, 0x00, 0x23, 0x3B, 0x3F, 0x30, 0x39,
0x30, 0x30, 0x3A, 0x1F, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x04, 0x30, 0x04, 0x1C, 0x30, 0x44, 0x30,
0x44, 0x30, 0x1C, 0x04, 0x30, 0x04, 0x30, 0x44, 0x30, 0x30, 0x44, 0x30, 0x44, 0x30, 0x04, 0x00,
0x04, 0x30, 0x00, 0x17, 0x4C, 0x4C, 0x1F, 0x23, 0x3D, 0x23, 0x3D, 0x23, 0x78, 0x30, 0x3B, 0x30,
0x02, 0x30, 0x32, 0x30, 0x42, 0x44, 0x30, 0x39, 0x2A, 0x4B, 0x35, 0x00, 0x77, 0x85, 0x00, 0x00,
0x77, 0x85, 0x00, 0x3D, 0x28, 0x4B, 0x04, 0x31, 0x02, 0x30, 0x1C, 0x42, 0x32, 0x3A, 0x44, 0x42,
0x42, 0x42, 0x30, 0x44, 0x1C, 0x44, 0x42, 0x30, 0x44, 0x3A, 0x44, 0x1C, 0x44, 0x32, 0x42, 0x44,
0x3A, 0x44, 0x1C, 0x44, 0x42, 0x30, 0x02, 0x3A, 0x42, 0x30, 0x30, 0x4C, 0x4C, 0x32, 0x30, 0x02,
0x30, 0x02, 0x30, 0x31, 0x30, 0x78, 0x30, 0x2E, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x39, 0x7A,
0x4A, 0x00, 0x78, 0x85, 0x00, 0x00, 0x77, 0x85, 0x00, 0x3D, 0x19, 0x4B, 0x2A, 0x30, 0x7A, 0x62,
0x2A, 0x2E, 0x39, 0x2A, 0x04, 0x3D, 0x62, 0x3D, 0x42, 0x62, 0x3D, 0x62, 0x3D, 0x02, 0x1F, 0x02,
0x62, 0x73, 0x62, 0x49, 0x62, 0x02, 0x02, 0x02, 0x47, 0x62, 0x78, 0x62, 0x2E, 0x2E, 0x62, 0x62,
0x62, 0x47, 0x4C, 0x2A, 0x2E, 0x7A, 0x2E, 0x7A, 0x2E, 0x2A, 0x30, 0x39, 0x2E, 0x7A, 0x2E, 0x12,
0x2E, 0x39, 0x39, 0x31, 0x04, 0x01, 0x0D, 0x00, 0x78, 0x85, 0x00, 0x00, 0x78, 0x85, 0x00, 0x2F,
0x0D, 0x75, 0x30, 0x21, 0x04, 0x3D, 0x2E, 0x30, 0x04, 0x47, 0x04, 0x2A, 0x04, 0x31, 0x04, 0x04,
0x39, 0x04, 0x4A, 0x3F, 0x04, 0x49, 0x04, 0x27, 0x27, 0x04, 0x39, 0x04, 0x3B, 0x12, 0x04, 0x39,
0x04, 0x27, 0x2E, 0x04, 0x39, 0x04, 0x47, 0x4C, 0x27, 0x27, 0x39, 0x04, 0x2A, 0x04, 0x47, 0x00,
0x0B, 0x30, 0x01, 0x71, 0x01, 0x00, 0x78, 0x85, 0x00, 0x00, 0x78, 0x85, 0x00, 0x2F, 0x1E, 0x71,
0x4B, 0x71, 0x4C, 0x78, 0x4B, 0x4B, 0x4B, 0x01, 0x4C, 0x6C, 0x4C, 0x78, 0x78, 0x4C, 0x75, 0x4C,
0x01, 0x6C, 0x4C, 0x01, 0x7A, 0x78, 0x01, 0x4C, 0x6C, 0x4C, 0x01, 0x6C, 0x4C, 0x01, 0x4C, 0x78,
0x78, 0x4C, 0x01, 0x4C, 0x6C, 0x4B, 0x78, 0x4C, 0x01, 0x4C, 0x01, 0x4C, 0x6C, 0x00, 0x0B, 0x4B,
0x01, 0x46, 0x01, 0x03, 0x78, 0x85, 0x00, 0x00, 0x79, 0x85, 0x00, 0x0B, 0x03, 0x00, 0x12, 0x43,
0x43, 0x0D, 0x0D, 0x0D, 0x4A, 0x43, 0x4A, 0x00, 0x05, 0x43, 0x00, 0x03, 0x4B, 0x75, 0x4A, 0x00,
0x08, 0x75, 0x01, 0x01, 0x01, 0x4A, 0x08, 0x75, 0x00, 0x03, 0x01, 0x4B, 0x0E, 0x00, 0x05, 0x43,
0x01, 0x0A, 0x0B, 0x0D, 0x01, 0x36, 0x79, 0x85, 0x00, 0x00, 0x88, 0x85, 0x01, 0x05, 0x01, 0x46,
0x15, 0x27, 0x00, 0x03, 0x75, 0x28, 0x35, 0x00, 0x8A, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x01, 0x15,
0x01, 0x45, 0x2C, 0x22, 0x01, 0x20, 0x80, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x01, 0x22, 0x01, 0x01,
0x2B, 0x1F, 0x00, 0x04, 0x12, 0x22, 0x1E, 0x19, 0x7E, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03,
0x22, 0x1F, 0x44, 0x00, 0x29, 0x1F, 0x00, 0x05, 0x44, 0x30, 0x22, 0x00, 0x05, 0x00, 0x7E, 0x85,
0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x29, 0x83, 0x00, 0x05, 0x55, 0x30,
0x22, 0x15, 0x36, 0x00, 0x7E, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00,
0x29, 0x83, 0x00, 0x06, 0x55, 0x30, 0x22, 0x00, 0x36, 0x35, 0x7D, 0x85, 0x00, 0x00, 0x7D, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x29, 0x83, 0x00, 0x06, 0x55, 0x30, 0x22, 0x15, 0x44, 0x19,
0x7D, 0x85, 0x00, 0x00, 0x77, 0x85, 0x00, 0x09, 0x4E, 0x5C, 0x4F, 0x58, 0x4D, 0x56, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x01, 0x10, 0x07, 0x85, 0x00, 0x03, 0x6B, 0x10, 0x0F, 0x00, 0x10, 0x83,
0x00, 0x09, 0x55, 0x30, 0x22, 0x2F, 0x40, 0x58, 0x4F, 0x4E, 0x57, 0x00, 0x7A, 0x85, 0x00, 0x00,
0x71, 0x85, 0x00, 0x05, 0x4E, 0x5E, 0x5A, 0x4D, 0x50, 0x00, 0x07, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x01, 0x10, 0x0A, 0x85, 0x01, 0x0B, 0x0F, 0x83, 0x00, 0x06, 0x55, 0x30,
0x22, 0x2F, 0x29, 0x41, 0x04, 0x84, 0x00, 0x05, 0x56, 0x4D, 0x4F, 0x52, 0x57, 0x00, 0x74, 0x85,
0x00, 0x00, 0x6B, 0x85, 0x00, 0x05, 0x51, 0x4E, 0x4F, 0x5D, 0x56, 0x00, 0x0D, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x07, 0x10, 0x85, 0x85, 0x85, 0x79, 0x10, 0x10, 0x00,
0x05, 0x85, 0x01, 0x0F, 0x0E, 0x83, 0x00, 0x06, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x0A, 0x84,
0x00, 0x04, 0x4D, 0x58, 0x5E, 0x57, 0x6F, 0x85, 0x00, 0x00, 0x67, 0x85, 0x00, 0x04, 0x53, 0x52,
0x58, 0x59, 0x12, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x0D, 0x10, 0x85,
0x85, 0x85, 0x1A, 0x83, 0x83, 0x2B, 0x10, 0x85, 0x85, 0x85, 0x79, 0x00, 0x0E, 0x83, 0x00, 0x06,
0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x0F, 0x84, 0x00, 0x04, 0x4D, 0x4F, 0x5C, 0x51, 0x6A, 0x85,
0x00, 0x00, 0x63, 0x85, 0x00, 0x04, 0x53, 0x52, 0x58, 0x56, 0x16, 0x84, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x0E, 0x83, 0x00, 0x09, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x83, 0x83, 0x2B, 0x00,
0x04, 0x85, 0x01, 0x0F, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x3C, 0x00,
0x12, 0x84, 0x00, 0x04, 0x59, 0x5A, 0x5C, 0x51, 0x66, 0x85, 0x00, 0x00, 0x5F, 0x85, 0x00, 0x04,
0x51, 0x5C, 0x5A, 0x56, 0x1A, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05,
0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00,
0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x41, 0x00, 0x16, 0x84, 0x00, 0x03,
0x59, 0x4F, 0x57, 0x00, 0x63, 0x85, 0x00, 0x00, 0x5C, 0x85, 0x00, 0x03, 0x53, 0x5E, 0x5D, 0x00,
0x1E, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85,
0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x0B, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x07,
0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x41, 0x00, 0x19, 0x84, 0x00, 0x04, 0x50, 0x58, 0x5C, 0x51,
0x5F, 0x85, 0x00, 0x00, 0x59, 0x85, 0x00, 0x03, 0x53, 0x5E, 0x59, 0x00, 0x21, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83,
0x00, 0x05, 0x1A, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x29, 0x00, 0x1D, 0x84, 0x00, 0x03, 0x5D, 0x52, 0x51, 0x00, 0x5C, 0x85, 0x00, 0x00,
0x56, 0x85, 0x00, 0x03, 0x53, 0x5E, 0x59, 0x00, 0x24, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00,
0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85,
0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x07, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x00,
0x20, 0x84, 0x00, 0x03, 0x5D, 0x52, 0x51, 0x00, 0x59, 0x85, 0x00, 0x00, 0x53, 0x85, 0x00, 0x03,
0x51, 0x52, 0x4D, 0x00, 0x27, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05,
0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85, 0x10, 0x00,
0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x21, 0x84, 0x00, 0x03,
0x50, 0x58, 0x5C, 0x00, 0x57, 0x85, 0x00, 0x00, 0x51, 0x85, 0x00, 0x03, 0x4E, 0x58, 0x50, 0x00,
0x29, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85,
0x1A, 0x00, 0x04, 0x83, 0x00, 0x05, 0x1A, 0x85, 0x85, 0x85, 0x10, 0x00, 0x0D, 0x83, 0x00, 0x08,
0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x24, 0x84, 0x00, 0x03, 0x56, 0x4F, 0x53, 0x00,
0x54, 0x85, 0x00, 0x00, 0x4E, 0x85, 0x00, 0x03, 0x51, 0x5E, 0x56, 0x00, 0x2C, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x00, 0x04, 0x83,
0x00, 0x05, 0x10, 0x85, 0x85, 0x85, 0x0B, 0x00, 0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x29, 0x41, 0x27, 0x84, 0x01, 0x5D, 0x01, 0x5C, 0x52, 0x85, 0x00, 0x00, 0x4C, 0x85,
0x00, 0x03, 0x53, 0x58, 0x50, 0x00, 0x2E, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83,
0x00, 0x09, 0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x83, 0x83, 0x6F, 0x00, 0x04, 0x85, 0x01, 0x1A,
0x0D, 0x83, 0x00, 0x08, 0x55, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x41, 0x29, 0x84, 0x00, 0x03,
0x56, 0x4F, 0x51, 0x00, 0x4F, 0x85, 0x00, 0x00, 0x4A, 0x85, 0x01, 0x4E, 0x01, 0x4D, 0x2C, 0x84,
0x00, 0x08, 0x59, 0x5D, 0x4F, 0x52, 0x4E, 0x22, 0x1F, 0x55, 0x0E, 0x83, 0x00, 0x09, 0x10, 0x85,
0x85, 0x85, 0x1A, 0x83, 0x83, 0x83, 0x0B, 0x00, 0x04, 0x85, 0x01, 0x2B, 0x0D, 0x83, 0x00, 0x08,
0x55, 0x30, 0x22, 0x33, 0x7C, 0x7C, 0x40, 0x40, 0x2B, 0x84, 0x00, 0x03, 0x50, 0x58, 0x53, 0x00,
0x4D, 0x85, 0x00, 0x00, 0x48, 0x85, 0x01, 0x52, 0x01, 0x59, 0x28, 0x84, 0x00, 0x05, 0x59, 0x5D,
0x4F, 0x4E, 0x53, 0x00, 0x06, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x00, 0x08,
0x10, 0x85, 0x85, 0x85, 0x1A, 0x83, 0x2B, 0x0B, 0x04, 0x85, 0x01, 0x0B, 0x0E, 0x83, 0x00, 0x04,
0x55, 0x30, 0x22, 0x15, 0x04, 0x36, 0x00, 0x06, 0x85, 0x4E, 0x52, 0x4F, 0x4D, 0x50, 0x28, 0x84,
0x01, 0x58, 0x01, 0x57, 0x4B, 0x85, 0x00, 0x00, 0x46, 0x85, 0x01, 0x52, 0x01, 0x56, 0x25, 0x84,
0x00, 0x04, 0x56, 0x5D, 0x5E, 0x4E, 0x0C, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83,
0x01, 0x10, 0x0A, 0x85, 0x01, 0x6B, 0x01, 0x2B, 0x0E, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x00,
0x04, 0x36, 0x01, 0x19, 0x05, 0x85, 0x00, 0x05, 0x53, 0x5C, 0x4F, 0x4D, 0x50, 0x00, 0x25, 0x84,
0x01, 0x4D, 0x01, 0x4E, 0x49, 0x85, 0x00, 0x00, 0x44, 0x85, 0x01, 0x52, 0x01, 0x56, 0x23, 0x84,
0x00, 0x04, 0x59, 0x5A, 0x5C, 0x53, 0x10, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83,
0x01, 0x10, 0x09, 0x85, 0x01, 0x79, 0x01, 0x2B, 0x0F, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x00,
0x04, 0x36, 0x01, 0x19, 0x0A, 0x85, 0x00, 0x04, 0x57, 0x5E, 0x58, 0x56, 0x23, 0x84, 0x01, 0x4D,
0x01, 0x4E, 0x47, 0x85, 0x00, 0x00, 0x42, 0x85, 0x01, 0x5C, 0x01, 0x56, 0x21, 0x84, 0x00, 0x04,
0x56, 0x5A, 0x5C, 0x51, 0x14, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x0E, 0x83, 0x01, 0x0B,
0x07, 0x10, 0x01, 0x0B, 0x01, 0x0F, 0x11, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x15, 0x04, 0x36,
0x01, 0x03, 0x0E, 0x85, 0x00, 0x04, 0x53, 0x52, 0x5D, 0x50, 0x21, 0x84, 0x01, 0x5D, 0x01, 0x53,
0x45, 0x85, 0x00, 0x00, 0x40, 0x85, 0x01, 0x4E, 0x01, 0x4D, 0x20, 0x84, 0x00, 0x03, 0x5D, 0x5E,
0x53, 0x00, 0x18, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x29, 0x83, 0x00, 0x04, 0x55, 0x30,
0x22, 0x00, 0x04, 0x36, 0x01, 0x05, 0x12, 0x85, 0x00, 0x03, 0x57, 0x4F, 0x59, 0x00, 0x20, 0x84,
0x01, 0x58, 0x01, 0x51, 0x43, 0x85, 0x00, 0x00, 0x3E, 0x85, 0x01, 0x53, 0x01, 0x58, 0x1E, 0x84,
0x00, 0x04, 0x50, 0x58, 0x5C, 0x51, 0x1B, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x29, 0x83,
0x00, 0x04, 0x55, 0x30, 0x22, 0x00, 0x05, 0x36, 0x15, 0x85, 0x00, 0x03, 0x53, 0x5E, 0x5D, 0x00,
0x1E, 0x84, 0x01, 0x50, 0x01, 0x4F, 0x42, 0x85, 0x00, 0x00, 0x3D, 0x85, 0x01, 0x4F, 0x01, 0x50,
0x1C, 0x84, 0x00, 0x03, 0x50, 0x58, 0x5C, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00,
0x04, 0x83, 0x04, 0x10, 0x00, 0x1D, 0x6F, 0x83, 0x10, 0x0B, 0x83, 0x10, 0x0F, 0x83, 0x6F, 0x10,
0x1A, 0x83, 0x10, 0x0F, 0x83, 0x0F, 0x10, 0x2B, 0x6F, 0x0B, 0x6B, 0x10, 0x0F, 0x83, 0x10, 0x2B,
0x83, 0x2B, 0x10, 0x00, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x15, 0x05, 0x36, 0x01, 0x35,
0x17, 0x85, 0x00, 0x03, 0x51, 0x52, 0x5D, 0x00, 0x1D, 0x84, 0x01, 0x56, 0x01, 0x4E, 0x40, 0x85,
0x00, 0x00, 0x3B, 0x85, 0x01, 0x4E, 0x01, 0x56, 0x1C, 0x84, 0x01, 0x5D, 0x01, 0x52, 0x22, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x04, 0x83, 0x00, 0x21, 0x1A, 0x2B, 0x1A, 0x85, 0x0B, 0x83,
0x85, 0x10, 0x83, 0x10, 0x79, 0x1A, 0x0B, 0x85, 0x0F, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x2B,
0x10, 0x6B, 0x0F, 0x10, 0x85, 0x6F, 0x85, 0x0F, 0x2B, 0x6B, 0x85, 0x00, 0x04, 0x83, 0x00, 0x04,
0x55, 0x30, 0x22, 0x00, 0x05, 0x36, 0x01, 0x35, 0x1A, 0x85, 0x00, 0x03, 0x53, 0x5E, 0x59, 0x00,
0x1C, 0x84, 0x01, 0x5D, 0x01, 0x53, 0x3E, 0x85, 0x00, 0x00, 0x39, 0x85, 0x01, 0x51, 0x01, 0x58,
0x1B, 0x84, 0x00, 0x03, 0x56, 0x5E, 0x51, 0x00, 0x24, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00,
0x05, 0x83, 0x00, 0x20, 0x0F, 0x10, 0x85, 0x0B, 0x83, 0x85, 0x10, 0x83, 0x0F, 0x85, 0x10, 0x85,
0x6B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F, 0x6B, 0x10, 0x83, 0x0F, 0x85, 0x1A, 0x85,
0x0F, 0x79, 0x85, 0x85, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D, 0x23, 0x85, 0x00, 0x03,
0x57, 0x5A, 0x50, 0x00, 0x1A, 0x84, 0x01, 0x50, 0x01, 0x5E, 0x3D, 0x85, 0x00, 0x00, 0x38, 0x85,
0x01, 0x5C, 0x01, 0x50, 0x1A, 0x84, 0x01, 0x58, 0x01, 0x4E, 0x27, 0x85, 0x00, 0x03, 0x22, 0x1F,
0x55, 0x00, 0x04, 0x83, 0x00, 0x21, 0x1A, 0x85, 0x85, 0x10, 0x6F, 0x83, 0x85, 0x10, 0x83, 0x83,
0x6B, 0x0B, 0x85, 0x0B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F, 0x85, 0x10, 0x83, 0x0F,
0x85, 0x1A, 0x85, 0x6B, 0x85, 0x1A, 0x85, 0x00, 0x04, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D,
0x26, 0x85, 0x01, 0x52, 0x01, 0x4D, 0x1A, 0x84, 0x01, 0x4D, 0x01, 0x57, 0x3B, 0x85, 0x00, 0x00,
0x36, 0x85, 0x01, 0x51, 0x01, 0x5D, 0x19, 0x84, 0x00, 0x03, 0x56, 0x4F, 0x51, 0x00, 0x29, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x04, 0x83, 0x00, 0x21, 0x10, 0x85, 0x6F, 0x83, 0x6F, 0x83,
0x85, 0x10, 0x83, 0x83, 0x0B, 0x85, 0x85, 0x2B, 0x83, 0x83, 0x85, 0x1A, 0x83, 0x1A, 0x85, 0x0F,
0x10, 0x79, 0x83, 0x0F, 0x85, 0x2B, 0x85, 0x85, 0x0F, 0x0F, 0x85, 0x00, 0x04, 0x83, 0x00, 0x04,
0x55, 0x30, 0x22, 0x2D, 0x28, 0x85, 0x01, 0x57, 0x01, 0x58, 0x19, 0x84, 0x01, 0x50, 0x01, 0x5E,
0x3A, 0x85, 0x00, 0x00, 0x35, 0x85, 0x01, 0x4E, 0x01, 0x50, 0x18, 0x84, 0x01, 0x56, 0x01, 0x52,
0x2C, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x04, 0x83, 0x00, 0x05, 0x0F, 0x85, 0x85, 0x85,
0x1A, 0x00, 0x04, 0x85, 0x00, 0x06, 0x83, 0x2B, 0x85, 0x10, 0x83, 0x1A, 0x04, 0x85, 0x00, 0x0E,
0x1A, 0x85, 0x0F, 0x2B, 0x6B, 0x85, 0x85, 0x0B, 0x83, 0x85, 0x1A, 0x83, 0x0F, 0x85, 0x04, 0x83,
0x00, 0x04, 0x55, 0x30, 0x22, 0x2D, 0x2A, 0x85, 0x00, 0x03, 0x51, 0x4F, 0x50, 0x00, 0x18, 0x84,
0x01, 0x4D, 0x01, 0x53, 0x38, 0x85, 0x00, 0x00, 0x34, 0x85, 0x01, 0x5A, 0x18, 0x84, 0x01, 0x4D,
0x01, 0x4E, 0x2E, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x05, 0x83, 0x00, 0x03, 0x6F, 0x0F,
0x2B, 0x00, 0x14, 0x83, 0x01, 0x0F, 0x01, 0x2B, 0x0B, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D,
0x2C, 0x85, 0x00, 0x03, 0x51, 0x52, 0x56, 0x00, 0x17, 0x84, 0x01, 0x50, 0x01, 0x5C, 0x37, 0x85,
0x00, 0x00, 0x32, 0x85, 0x01, 0x53, 0x01, 0x59, 0x17, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x30, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x55, 0x00, 0x29, 0x83, 0x00, 0x04, 0x55, 0x30, 0x22, 0x2D, 0x2F, 0x85,
0x01, 0x52, 0x01, 0x56, 0x17, 0x84, 0x01, 0x5A, 0x36, 0x85, 0x00, 0x00, 0x31, 0x85, 0x01, 0x4E,
0x01, 0x50, 0x16, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x32, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x7D, 0x00,
0x29, 0x55, 0x00, 0x04, 0x7D, 0x30, 0x22, 0x2D, 0x31, 0x85, 0x01, 0x52, 0x01, 0x50, 0x16, 0x84,
0x01, 0x59, 0x01, 0x51, 0x34, 0x85, 0x00, 0x00, 0x30, 0x85, 0x01, 0x5E, 0x16, 0x84, 0x01, 0x56,
0x01, 0x5C, 0x34, 0x85, 0x01, 0x22, 0x01, 0x39, 0x2B, 0x30, 0x00, 0x03, 0x1F, 0x22, 0x2D, 0x00,
0x32, 0x85, 0x00, 0x03, 0x51, 0x4F, 0x50, 0x00, 0x15, 0x84, 0x01, 0x50, 0x01, 0x57, 0x33, 0x85,
0x00, 0x00, 0x2F, 0x85, 0x01, 0x58, 0x15, 0x84, 0x01, 0x50, 0x01, 0x5E, 0x36, 0x85, 0x01, 0x48,
0x2D, 0x22, 0x01, 0x46, 0x35, 0x85, 0x01, 0x51, 0x01, 0x58, 0x16, 0x84, 0x01, 0x52, 0x32, 0x85,
0x00, 0x00, 0x2D, 0x85, 0x01, 0x51, 0x01, 0x59, 0x15, 0x84, 0x01, 0x5A, 0x01, 0x51, 0x38, 0x85,
0x2D, 0x2D, 0x01, 0x19, 0x37, 0x85, 0x01, 0x57, 0x01, 0x4D, 0x15, 0x84, 0x01, 0x5A, 0x31, 0x85,
0x00, 0x00, 0x2C, 0x85, 0x01, 0x57, 0x01, 0x59, 0x14, 0x84, 0x01, 0x59, 0x01, 0x57, 0xA1, 0x85,
0x01, 0x52, 0x01, 0x50, 0x14, 0x84, 0x01, 0x58, 0x30, 0x85, 0x00, 0x00, 0x2B, 0x85, 0x01, 0x57,
0x01, 0x50, 0x13, 0x84, 0x01, 0x50, 0x01, 0x5E, 0xA4, 0x85, 0x01, 0x51, 0x01, 0x5D, 0x14, 0x84,
0x01, 0x59, 0x01, 0x51, 0x2E, 0x85, 0x00, 0x00, 0x2A, 0x85, 0x01, 0x57, 0x01, 0x50, 0x13, 0x84,
0x01, 0x4D, 0x01, 0x53, 0xA7, 0x85, 0x01, 0x4E, 0x01, 0x56, 0x13, 0x84, 0x01, 0x59, 0x01, 0x51,
0x2D, 0x85, 0x00, 0x00, 0x29, 0x85, 0x01, 0x57, 0x01, 0x50, 0x12, 0x84, 0x01, 0x50, 0x01, 0x5E,
0xAA, 0x85, 0x01, 0x51, 0x01, 0x5D, 0x13, 0x84, 0x01, 0x59, 0x01, 0x51, 0x2C, 0x85, 0x00, 0x00,
0x28, 0x85, 0x01, 0x57, 0x01, 0x50, 0x12, 0x84, 0x01, 0x59, 0x01, 0x57, 0xAD, 0x85, 0x01, 0x5C,
0x01, 0x50, 0x12, 0x84, 0x01, 0x59, 0x01, 0x51, 0x2B, 0x85, 0x00, 0x00, 0x27, 0x85, 0x01, 0x57,
0x01, 0x50, 0x12, 0x84, 0x01, 0x5A, 0xB0, 0x85, 0x01, 0x53, 0x01, 0x59, 0x12, 0x84, 0x01, 0x59,
0x01, 0x51, 0x2A, 0x85, 0x00, 0x00, 0x26, 0x85, 0x01, 0x57, 0x01, 0x50, 0x11, 0x84, 0x01, 0x50,
0x01, 0x52, 0xB3, 0x85, 0x01, 0x5A, 0x12, 0x84, 0x01, 0x59, 0x01, 0x51, 0x29, 0x85, 0x00, 0x00,
0x25, 0x85, 0x01, 0x53, 0x01, 0x50, 0x11, 0x84, 0x01, 0x59, 0x01, 0x57, 0xB5, 0x85, 0x01, 0x52,
0x01, 0x50, 0x11, 0x84, 0x01, 0x5D, 0x29, 0x85, 0x00, 0x00, 0x24, 0x85, 0x01, 0x51, 0x01, 0x59,
0x11, 0x84, 0x01, 0x4D, 0x01, 0x51, 0xB7, 0x85, 0x01, 0x57, 0x01, 0x50, 0x11, 0x84, 0x01, 0x58,
0x28, 0x85, 0x00, 0x00, 0x24, 0x85, 0x01, 0x4D, 0x11, 0x84, 0x01, 0x58, 0xBA, 0x85, 0x01, 0x51,
0x01, 0x59, 0x11, 0x84, 0x01, 0x5E, 0x27, 0x85, 0x00, 0x00, 0x23, 0x85, 0x01, 0x58, 0x11, 0x84,
0x01, 0x4F, 0xBC, 0x85, 0x01, 0x51, 0x01, 0x59, 0x11, 0x84, 0x01, 0x5C, 0x26, 0x85, 0x00, 0x00,
0x22, 0x85, 0x01, 0x52, 0x11, 0x84, 0x01, 0x52, 0xBF, 0x85, 0x01, 0x58, 0x10, 0x84, 0x01, 0x50,
0x01, 0x53, 0x25, 0x85, 0x00, 0x00, 0x21, 0x85, 0x01, 0x57, 0x01, 0x50, 0x10, 0x84, 0x01, 0x52,
0xC1, 0x85, 0x01, 0x58, 0x10, 0x84, 0x01, 0x59, 0x01, 0x51, 0x24, 0x85, 0x00, 0x00, 0x20, 0x85,
0x01, 0x51, 0x01, 0x59, 0x10, 0x84, 0x01, 0x52, 0xC3, 0x85, 0x01, 0x58, 0x10, 0x84, 0x01, 0x5A,
0x24, 0x85, 0x00, 0x00, 0x20, 0x85, 0x01, 0x58, 0x10, 0x84, 0x01, 0x52, 0xC5, 0x85, 0x01, 0x58,
0x10, 0x84, 0x01, 0x5C, 0x23, 0x85, 0x00, 0x00, 0x1F, 0x85, 0x01, 0x5C, 0x10, 0x84, 0x01, 0x52,
0xC7, 0x85, 0x01, 0x58, 0x0F, 0x84, 0x01, 0x50, 0x01, 0x51, 0x22, 0x85, 0x00, 0x00, 0x1E, 0x85,
0x01, 0x51, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x4F, 0xC8, 0x85, 0x01, 0x51, 0x01, 0x59, 0x0F, 0x84,
0x01, 0x5D, 0x22, 0x85, 0x00, 0x00, 0x1E, 0x85, 0x01, 0x58, 0x0F, 0x84, 0x01, 0x58, 0xCA, 0x85,
0x01, 0x51, 0x01, 0x59, 0x0F, 0x84, 0x01, 0x5C, 0x21, 0x85, 0x00, 0x00, 0x1D, 0x85, 0x01, 0x4E,
0x0F, 0x84, 0x01, 0x59, 0xCC, 0x85, 0x01, 0x57, 0x01, 0x50, 0x0E, 0x84, 0x01, 0x56, 0x01, 0x51,
0x20, 0x85, 0x00, 0x00, 0x1D, 0x85, 0x01, 0x59, 0x0E, 0x84, 0x01, 0x50, 0x01, 0x51, 0xCD, 0x85,
0x01, 0x5C, 0x0F, 0x84, 0x01, 0x4F, 0x20, 0x85, 0x00, 0x00, 0x1C, 0x85, 0x01, 0x52, 0x0F, 0x84,
0x01, 0x57, 0xCF, 0x85, 0x01, 0x4F, 0x0F, 0x84, 0x01, 0x53, 0x1F, 0x85, 0x00, 0x00, 0x01, 0x85,
0x01, 0x06, 0x3C, 0x4B, 0x01, 0x4A, 0x01, 0x19, 0xAC, 0x85, 0x01, 0x03, 0x01, 0x75, 0x3B, 0x4B,
0x00, 0x03, 0x71, 0x15, 0x85, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1E, 0x4B, 0x71, 0x00, 0x3A, 0x0E,
0x00, 0x03, 0x6C, 0x4B, 0x00, 0x00, 0xAC, 0x85, 0x01, 0x4A, 0x01, 0x4B, 0x3B, 0x0E, 0x00, 0x03,
0x46, 0x4B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x4B, 0x0E, 0x00, 0x3A, 0x0A, 0x00, 0x03,
0x4A, 0x4B, 0x48, 0x00, 0xAC, 0x85, 0x01, 0x4A, 0x01, 0x4B, 0x3B, 0x0A, 0x01, 0x0E, 0x01, 0x4B,
0x00, 0x00, 0x00, 0x05, 0x1E, 0x4B, 0x02, 0x30, 0x2A, 0x00, 0x04, 0x4C, 0x01, 0x2E, 0x01, 0x30,
0x18, 0x4C, 0x01, 0x2E, 0x01, 0x04, 0x04, 0x4C, 0x01, 0x39, 0x01, 0x04, 0x07, 0x4C, 0x01, 0x2E,
0x01, 0x2E, 0x09, 0x4C, 0x00, 0x03, 0x04, 0x7A, 0x75, 0x00, 0xAC, 0x85, 0x00, 0x04, 0x3B, 0x75,
0x30, 0x04, 0x05, 0x4C, 0x01, 0x62, 0x01, 0x04, 0x18, 0x4C, 0x01, 0x04, 0x01, 0x2E, 0x04, 0x4C,
0x01, 0x2E, 0x01, 0x31, 0x07, 0x4C, 0x01, 0x30, 0x09, 0x4C, 0x00, 0x04, 0x39, 0x30, 0x4B, 0x15,
0x00, 0x00, 0x00, 0x05, 0x85, 0x48, 0x7A, 0x30, 0x12, 0x00, 0x04, 0x15, 0x00, 0x03, 0x01, 0x4C,
0x01, 0x00, 0x17, 0x15, 0x00, 0x09, 0x01, 0x4C, 0x0A, 0x15, 0x15, 0x15, 0x12, 0x2E, 0x21, 0x00,
0x05, 0x15, 0x00, 0x03, 0x21, 0x2E, 0x4C, 0x00, 0x08, 0x15, 0x00, 0x04, 0x0A, 0x62, 0x01, 0x3B,
0xAC, 0x85, 0x00, 0x0C, 0x37, 0x4B, 0x04, 0x62, 0x4A, 0x15, 0x15, 0x15, 0x21, 0x78, 0x78, 0x3B,
0x16, 0x15, 0x00, 0x03, 0x0D, 0x78, 0x01, 0x00, 0x04, 0x15, 0x01, 0x4C, 0x01, 0x12, 0x06, 0x15,
0x00, 0x03, 0x0A, 0x30, 0x0A, 0x00, 0x08, 0x15, 0x00, 0x04, 0x78, 0x04, 0x4B, 0x1E, 0x00, 0x00,
0x00, 0x11, 0x85, 0x06, 0x6C, 0x30, 0x31, 0x04, 0x30, 0x30, 0x42, 0x15, 0x15, 0x3D, 0x30, 0x30,
0x30, 0x02, 0x3A, 0x00, 0x0E, 0x30, 0x00, 0x21, 0x02, 0x30, 0x30, 0x30, 0x15, 0x15, 0x23, 0x30,
0x30, 0x30, 0x4C, 0x02, 0x2A, 0x30, 0x23, 0x30, 0x02, 0x30, 0x2E, 0x2E, 0x78, 0x30, 0x30, 0x30,
0x1C, 0x02, 0x30, 0x27, 0x30, 0x4C, 0x30, 0x71, 0x2A, 0x00, 0xAD, 0x85, 0x00, 0x0F, 0x71, 0x4C,
0x30, 0x2A, 0x30, 0x30, 0x30, 0x02, 0x15, 0x15, 0x02, 0x30, 0x30, 0x30, 0x02, 0x00, 0x0E, 0x30,
0x00, 0x22, 0x02, 0x30, 0x30, 0x30, 0x44, 0x15, 0x15, 0x44, 0x30, 0x30, 0x32, 0x4C, 0x78, 0x30,
0x32, 0x44, 0x30, 0x23, 0x30, 0x12, 0x30, 0x12, 0x30, 0x30, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30,
0x39, 0x2E, 0x4B, 0x19, 0x00, 0x00, 0x00, 0x40, 0x85, 0x05, 0x4B, 0x2E, 0x30, 0x39, 0x30, 0x30,
0x30, 0x32, 0x1F, 0x15, 0x1C, 0x30, 0x32, 0x1C, 0x32, 0x1C, 0x30, 0x04, 0x30, 0x42, 0x1C, 0x30,
0x32, 0x30, 0x04, 0x30, 0x1C, 0x1C, 0x30, 0x02, 0x30, 0x32, 0x30, 0x32, 0x44, 0x42, 0x30, 0x30,
0x30, 0x4C, 0x04, 0x3F, 0x4C, 0x01, 0x30, 0x4C, 0x4C, 0x78, 0x30, 0x12, 0x30, 0x32, 0x30, 0x32,
0x44, 0x30, 0x02, 0x30, 0x31, 0x62, 0x4B, 0x37, 0xAD, 0x85, 0x00, 0x3F, 0x0D, 0x6C, 0x30, 0x39,
0x62, 0x30, 0x30, 0x1C, 0x44, 0x15, 0x23, 0x30, 0x1C, 0x42, 0x1C, 0x32, 0x30, 0x1C, 0x1C, 0x30,
0x32, 0x30, 0x42, 0x1C, 0x3A, 0x32, 0x30, 0x32, 0x30, 0x32, 0x1C, 0x30, 0x04, 0x3A, 0x02, 0x32,
0x1C, 0x30, 0x30, 0x32, 0x4C, 0x2A, 0x4C, 0x78, 0x2E, 0x30, 0x01, 0x4C, 0x7A, 0x62, 0x7A, 0x30,
0x32, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x2A, 0x4C, 0x46, 0x85, 0x00, 0x00, 0x00, 0x00, 0x40,
0x85, 0x85, 0x48, 0x78, 0x30, 0x2A, 0x30, 0x30, 0x3A, 0x23, 0x23, 0x32, 0x32, 0x42, 0x42, 0x44,
0x3A, 0x32, 0x42, 0x1C, 0x44, 0x3A, 0x44, 0x30, 0x1C, 0x44, 0x42, 0x44, 0x3A, 0x44, 0x3A, 0x1C,
0x44, 0x1C, 0x44, 0x30, 0x32, 0x42, 0x30, 0x30, 0x30, 0x4C, 0x2E, 0x21, 0x15, 0x73, 0x23, 0x3D,
0x15, 0x0A, 0x30, 0x12, 0x30, 0x02, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x4C, 0x2E, 0x4B, 0x05,
0xAD, 0x85, 0x00, 0x3F, 0x1E, 0x4B, 0x02, 0x62, 0x39, 0x30, 0x30, 0x44, 0x23, 0x27, 0x32, 0x44,
0x3A, 0x32, 0x42, 0x42, 0x44, 0x3A, 0x32, 0x42, 0x1C, 0x02, 0x3A, 0x44, 0x30, 0x32, 0x42, 0x1C,
0x44, 0x3A, 0x44, 0x1C, 0x32, 0x04, 0x1C, 0x44, 0x30, 0x30, 0x30, 0x32, 0x4C, 0x12, 0x15, 0x15,
0x1F, 0x23, 0x15, 0x15, 0x7A, 0x2E, 0x3D, 0x30, 0x02, 0x30, 0x44, 0x30, 0x44, 0x42, 0x62, 0x2E,
0x78, 0x01, 0x85, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x85, 0x85, 0x15, 0x71, 0x30, 0x39, 0x62, 0x30,
0x30, 0x44, 0x44, 0x30, 0x32, 0x1C, 0x1C, 0x42, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x30, 0x44, 0x30,
0x32, 0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x42, 0x30,
0x30, 0x4C, 0x2E, 0x39, 0x32, 0x23, 0x32, 0x1F, 0x32, 0x7A, 0x30, 0x7A, 0x30, 0x27, 0x30, 0x32,
0x3A, 0x42, 0x44, 0x30, 0x31, 0x2A, 0x4B, 0x00, 0xAF, 0x85, 0x00, 0x3E, 0x48, 0x7A, 0x30, 0x2A,
0x30, 0x30, 0x3A, 0x27, 0x1C, 0x30, 0x44, 0x30, 0x32, 0x1C, 0x1C, 0x32, 0x30, 0x04, 0x3A, 0x32,
0x1C, 0x1C, 0x04, 0x30, 0x32, 0x3A, 0x32, 0x32, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x32, 0x1C, 0x1C,
0x1C, 0x30, 0x1C, 0x4C, 0x12, 0x32, 0x44, 0x44, 0x32, 0x27, 0x32, 0x4C, 0x2E, 0x3D, 0x30, 0x02,
0x30, 0x02, 0x30, 0x02, 0x30, 0x2E, 0x02, 0x01, 0x21, 0x85, 0x00, 0x00, 0x00, 0x3F, 0x85, 0x85,
0x03, 0x4B, 0x31, 0x62, 0x39, 0x30, 0x2E, 0x30, 0x04, 0x02, 0x42, 0x2E, 0x3A, 0x27, 0x04, 0x1C,
0x2E, 0x1C, 0x23, 0x30, 0x02, 0x44, 0x1C, 0x02, 0x3A, 0x23, 0x30, 0x02, 0x04, 0x42, 0x02, 0x3A,
0x23, 0x30, 0x02, 0x04, 0x1C, 0x30, 0x30, 0x7A, 0x2E, 0x2E, 0x30, 0x3D, 0x30, 0x3D, 0x30, 0x4C,
0x30, 0x78, 0x30, 0x49, 0x30, 0x1F, 0x30, 0x02, 0x04, 0x30, 0x2A, 0x7A, 0x75, 0x00, 0xAF, 0x85,
0x00, 0x3E, 0x06, 0x71, 0x30, 0x15, 0x62, 0x30, 0x2E, 0x1C, 0x2E, 0x30, 0x04, 0x02, 0x1C, 0x2E,
0x3A, 0x44, 0x32, 0x1C, 0x2E, 0x1C, 0x23, 0x30, 0x02, 0x04, 0x1C, 0x3D, 0x1C, 0x27, 0x30, 0x02,
0x04, 0x1C, 0x2E, 0x1C, 0x3D, 0x30, 0x3A, 0x30, 0x30, 0x4C, 0x78, 0x30, 0x02, 0x02, 0x30, 0x3D,
0x30, 0x39, 0x02, 0x2E, 0x04, 0x1F, 0x30, 0x39, 0x30, 0x39, 0x30, 0x39, 0x30, 0x4B, 0x15, 0x85,
0x00, 0x00, 0x00, 0x3F, 0x85, 0x85, 0x85, 0x75, 0x3F, 0x30, 0x49, 0x04, 0x31, 0x2E, 0x04, 0x2E,
0x31, 0x73, 0x04, 0x02, 0x02, 0x04, 0x73, 0x04, 0x23, 0x31, 0x3D, 0x02, 0x04, 0x23, 0x04, 0x23,
0x02, 0x02, 0x23, 0x31, 0x3B, 0x04, 0x23, 0x04, 0x02, 0x02, 0x04, 0x04, 0x04, 0x12, 0x2E, 0x3D,
0x04, 0x39, 0x04, 0x39, 0x04, 0x7A, 0x30, 0x04, 0x30, 0x31, 0x30, 0x02, 0x30, 0x62, 0x04, 0x62,
0x62, 0x01, 0x3B, 0x00, 0xAF, 0x85, 0x00, 0x23, 0x05, 0x4B, 0x31, 0x02, 0x2A, 0x04, 0x49, 0x30,
0x02, 0x31, 0x02, 0x23, 0x04, 0x23, 0x04, 0x02, 0x02, 0x04, 0x73, 0x39, 0x39, 0x04, 0x02, 0x02,
0x04, 0x73, 0x04, 0x23, 0x04, 0x4C, 0x3D, 0x04, 0x73, 0x04, 0x23, 0x00, 0x04, 0x04, 0x00, 0x17,
0x4C, 0x3B, 0x04, 0x31, 0x27, 0x27, 0x31, 0x04, 0x4C, 0x30, 0x04, 0x04, 0x02, 0x30, 0x02, 0x30,
0x02, 0x30, 0x62, 0x04, 0x4B, 0x1E, 0x85, 0x00, 0x00, 0x00, 0x00, 0x32, 0x85, 0x85, 0x85, 0x28,
0x4B, 0x2E, 0x7A, 0x30, 0x04, 0x2A, 0x2E, 0x2E, 0x2A, 0x30, 0x47, 0x30, 0x23, 0x2E, 0x30, 0x78,
0x30, 0x4C, 0x7A, 0x30, 0x4C, 0x04, 0x30, 0x4C, 0x30, 0x4C, 0x30, 0x2A, 0x4C, 0x30, 0x4C, 0x42,
0x04, 0x2E, 0x30, 0x39, 0x30, 0x2A, 0x7A, 0x23, 0x30, 0x4C, 0x30, 0x4C, 0x30, 0x3F, 0x0B, 0x2E,
0x01, 0x71, 0x01, 0x00, 0xB0, 0x85, 0x00, 0x2F, 0x75, 0x3F, 0x2E, 0x4C, 0x30, 0x2A, 0x2E, 0x2E,
0x4C, 0x62, 0x30, 0x7A, 0x30, 0x2A, 0x30, 0x23, 0x2E, 0x30, 0x6C, 0x2A, 0x30, 0x7A, 0x30, 0x4C,
0x30, 0x2E, 0x2E, 0x30, 0x2A, 0x39, 0x30, 0x4C, 0x30, 0x4C, 0x30, 0x2E, 0x2E, 0x30, 0x7A, 0x3F,
0x30, 0x4C, 0x62, 0x2E, 0x31, 0x3A, 0x7A, 0x00, 0x0A, 0x2E, 0x00, 0x04, 0x2A, 0x4B, 0x19, 0x85,
0x00, 0x00, 0x00, 0x05, 0x85, 0x85, 0x85, 0x19, 0x0D, 0x00, 0x38, 0x4B, 0x01, 0x0D, 0x01, 0x19,
0xB0, 0x85, 0x01, 0x05, 0x01, 0x48, 0x37, 0x4B, 0x00, 0x04, 0x46, 0x0C, 0x85, 0x85, 0x00, 0x00,
0x06, 0x85, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x19, 0x85, 0x19, 0x49, 0x0D, 0x49, 0x0D, 0x06, 0x49,
0x0D, 0x00, 0x4B, 0x7A, 0x2A, 0x78, 0x47, 0x7A, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A, 0x39, 0x78,
0x47, 0x78, 0x7A, 0x7A, 0x78, 0x47, 0x78, 0x49, 0x18, 0x0A, 0x0D, 0x49, 0x0D, 0x49, 0x0D, 0x28,
0x06, 0x36, 0x01, 0x05, 0xB9, 0x85, 0x00, 0x2C, 0x23, 0x00, 0x15, 0x05, 0x03, 0x05, 0x15, 0x49,
0x0C, 0x06, 0x15, 0x06, 0x00, 0x0A, 0x48, 0x3D, 0x47, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A, 0x7A,
0x78, 0x39, 0x47, 0x78, 0x47, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x7A, 0x46, 0x49, 0x00, 0x00,
0x49, 0x15, 0x06, 0x36, 0x0B, 0x03, 0x00, 0x03, 0x19, 0x85, 0x85, 0x00, 0x00, 0x00, 0x09, 0x85,
0x00, 0x03, 0x15, 0x21, 0x21, 0x00, 0x08, 0x3B, 0x01, 0x45, 0x15, 0x4A, 0x01, 0x4B, 0x01, 0x0E,
0x09, 0x3B, 0x00, 0x05, 0x12, 0x28, 0x36, 0x36, 0x35, 0x00, 0xBA, 0x85, 0x01, 0x03, 0x01, 0x0D,
0x09, 0x21, 0x01, 0x75, 0x01, 0x18, 0x15, 0x4A, 0x01, 0x45, 0x01, 0x3B, 0x09, 0x21, 0x01, 0x28,
0x0A, 0x85, 0x00, 0x00, 0x08, 0x85, 0x01, 0x0A, 0x01, 0x22, 0x2B, 0x18, 0x00, 0x05, 0x45, 0x45,
0x2D, 0x36, 0x19, 0x00, 0x1E, 0x85, 0x00, 0x04, 0x57, 0x4E, 0x4E, 0x4E, 0x80, 0x85, 0x01, 0x51,
0x04, 0x4E, 0x12, 0x85, 0x00, 0x03, 0x03, 0x45, 0x45, 0x00, 0x2A, 0x18, 0x00, 0x03, 0x38, 0x22,
0x20, 0x00, 0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x01, 0x22, 0x01, 0x2A, 0x2B, 0x30, 0x00, 0x05,
0x42, 0x22, 0x00, 0x36, 0x03, 0x00, 0x0D, 0x85, 0x01, 0x57, 0x04, 0x4D, 0x01, 0x52, 0x09, 0x85,
0x01, 0x5C, 0x01, 0x56, 0x04, 0x84, 0x00, 0x03, 0x50, 0x4F, 0x51, 0x00, 0x06, 0x85, 0x04, 0x4D,
0x01, 0x5D, 0x05, 0x85, 0x01, 0x51, 0x05, 0x4D, 0x01, 0x4F, 0x01, 0x85, 0x0D, 0x4D, 0x00, 0x06,
0x85, 0x85, 0x5E, 0x4D, 0x4D, 0x4D, 0x09, 0x85, 0x00, 0x03, 0x5E, 0x4D, 0x4D, 0x00, 0x13, 0x85,
0x01, 0x5A, 0x04, 0x4D, 0x00, 0x05, 0x51, 0x85, 0x85, 0x85, 0x4E, 0x00, 0x04, 0x4D, 0x00, 0x04,
0x52, 0x85, 0x85, 0x57, 0x04, 0x4D, 0x00, 0x09, 0x4F, 0x85, 0x85, 0x85, 0x57, 0x4D, 0x4D, 0x4D,
0x4E, 0x00, 0x08, 0x85, 0x00, 0x04, 0x51, 0x4D, 0x4D, 0x52, 0x06, 0x85, 0x01, 0x53, 0x01, 0x58,
0x05, 0x84, 0x01, 0x50, 0x01, 0x4F, 0x10, 0x85, 0x01, 0x2D, 0x01, 0x22, 0x2C, 0x30, 0x00, 0x04,
0x12, 0x71, 0x36, 0x19, 0x07, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x00, 0x00,
0x29, 0x2F, 0x00, 0x06, 0x34, 0x30, 0x22, 0x15, 0x36, 0x05, 0x0D, 0x85, 0x01, 0x51, 0x04, 0x84,
0x01, 0x4D, 0x08, 0x85, 0x01, 0x52, 0x08, 0x84, 0x01, 0x59, 0x01, 0x53, 0x05, 0x85, 0x01, 0x4D,
0x04, 0x84, 0x05, 0x85, 0x01, 0x52, 0x05, 0x84, 0x01, 0x5C, 0x01, 0x85, 0x0D, 0x84, 0x00, 0x06,
0x4E, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x08, 0x85, 0x00, 0x04, 0x51, 0x50, 0x84, 0x84, 0x13, 0x85,
0x01, 0x4D, 0x04, 0x84, 0x04, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x85, 0x85, 0x4E,
0x04, 0x84, 0x00, 0x09, 0x4F, 0x85, 0x85, 0x85, 0x4E, 0x84, 0x84, 0x84, 0x4E, 0x00, 0x08, 0x85,
0x00, 0x04, 0x5D, 0x84, 0x84, 0x4E, 0x05, 0x85, 0x01, 0x52, 0x09, 0x84, 0x01, 0x58, 0x0F, 0x85,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x7E, 0x29, 0x5B, 0x00, 0x05, 0x27, 0x12, 0x71, 0x36, 0x03, 0x00,
0x07, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x29, 0x80, 0x00, 0x07,
0x2F, 0x30, 0x22, 0x00, 0x36, 0x36, 0x35, 0x00, 0x0D, 0x85, 0x00, 0x05, 0x56, 0x84, 0x84, 0x84,
0x50, 0x00, 0x07, 0x85, 0x01, 0x51, 0x01, 0x50, 0x09, 0x84, 0x01, 0x50, 0x01, 0x51, 0x04, 0x85,
0x01, 0x4D, 0x04, 0x84, 0x01, 0x51, 0x04, 0x85, 0x01, 0x56, 0x04, 0x84, 0x00, 0x04, 0x56, 0x85,
0x85, 0x59, 0x0C, 0x84, 0x00, 0x06, 0x4E, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x08, 0x85, 0x00, 0x04,
0x4F, 0x84, 0x84, 0x84, 0x13, 0x85, 0x01, 0x59, 0x04, 0x84, 0x04, 0x85, 0x01, 0x5A, 0x04, 0x84,
0x00, 0x04, 0x4E, 0x85, 0x85, 0x5E, 0x04, 0x84, 0x00, 0x08, 0x52, 0x85, 0x85, 0x85, 0x4F, 0x84,
0x84, 0x84, 0x08, 0x85, 0x00, 0x05, 0x52, 0x84, 0x84, 0x84, 0x51, 0x00, 0x04, 0x85, 0x01, 0x5A,
0x0B, 0x84, 0x01, 0x52, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82, 0x00, 0x05,
0x1F, 0x12, 0x71, 0x36, 0x05, 0x00, 0x07, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F,
0x33, 0x00, 0x29, 0x80, 0x00, 0x07, 0x2F, 0x30, 0x22, 0x00, 0x36, 0x36, 0x19, 0x00, 0x0D, 0x85,
0x01, 0x5D, 0x04, 0x84, 0x01, 0x53, 0x06, 0x85, 0x01, 0x4F, 0x0B, 0x84, 0x01, 0x59, 0x04, 0x85,
0x01, 0x4F, 0x04, 0x84, 0x00, 0x05, 0x4E, 0x85, 0x85, 0x85, 0x4E, 0x00, 0x05, 0x84, 0x00, 0x04,
0x52, 0x85, 0x85, 0x4D, 0x0C, 0x84, 0x00, 0x06, 0x4E, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x07, 0x85,
0x00, 0x05, 0x51, 0x50, 0x84, 0x84, 0x84, 0x00, 0x13, 0x85, 0x04, 0x84, 0x01, 0x4D, 0x04, 0x85,
0x01, 0x4D, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4F, 0x04, 0x84, 0x00, 0x08, 0x4E, 0x85,
0x85, 0x85, 0x58, 0x84, 0x84, 0x56, 0x07, 0x85, 0x00, 0x05, 0x53, 0x50, 0x84, 0x84, 0x56, 0x00,
0x04, 0x85, 0x01, 0x52, 0x0C, 0x84, 0x01, 0x59, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x29, 0x82, 0x00, 0x05, 0x1F, 0x12, 0x71, 0x36, 0x05, 0x00, 0x07, 0x85, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0C, 0x80, 0x00, 0x05, 0x69, 0x16, 0x16, 0x16, 0x69, 0x00,
0x07, 0x80, 0x00, 0x05, 0x24, 0x16, 0x16, 0x16, 0x24, 0x00, 0x0C, 0x80, 0x00, 0x07, 0x2F, 0x30,
0x22, 0x15, 0x36, 0x36, 0x03, 0x00, 0x0D, 0x85, 0x01, 0x5E, 0x04, 0x84, 0x01, 0x52, 0x06, 0x85,
0x00, 0x09, 0x56, 0x84, 0x84, 0x84, 0x50, 0x52, 0x57, 0x5C, 0x59, 0x00, 0x04, 0x84, 0x00, 0x05,
0x4F, 0x85, 0x85, 0x85, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x05, 0x4E, 0x85, 0x85, 0x85, 0x5D, 0x00,
0x04, 0x84, 0x00, 0x05, 0x50, 0x85, 0x85, 0x85, 0x4D, 0x00, 0x04, 0x84, 0x08, 0x4D, 0x00, 0x06,
0x57, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x07, 0x85, 0x00, 0x05, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x00,
0x13, 0x85, 0x04, 0x84, 0x01, 0x4D, 0x04, 0x85, 0x00, 0x09, 0x56, 0x84, 0x84, 0x84, 0x56, 0x85,
0x85, 0x85, 0x4D, 0x00, 0x04, 0x84, 0x00, 0x08, 0x51, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4D,
0x07, 0x85, 0x00, 0x09, 0x4D, 0x84, 0x84, 0x84, 0x58, 0x85, 0x85, 0x85, 0x57, 0x00, 0x05, 0x84,
0x00, 0x04, 0x50, 0x5D, 0x58, 0x50, 0x05, 0x84, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x11, 0x82, 0x00, 0x09, 0x64, 0x2C, 0x1D, 0x60, 0x60, 0x60, 0x1D, 0x2C, 0x64, 0x00, 0x0F, 0x82,
0x00, 0x05, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x00, 0x07, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03,
0x22, 0x1F, 0x33, 0x00, 0x0D, 0x80, 0x00, 0x04, 0x63, 0x85, 0x85, 0x26, 0x07, 0x80, 0x00, 0x05,
0x6A, 0x85, 0x85, 0x85, 0x16, 0x00, 0x0C, 0x80, 0x00, 0x07, 0x2F, 0x30, 0x22, 0x00, 0x36, 0x36,
0x05, 0x00, 0x0D, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x5A, 0x05, 0x85, 0x01, 0x53, 0x04, 0x84,
0x00, 0x0E, 0x52, 0x85, 0x85, 0x85, 0x51, 0x56, 0x84, 0x84, 0x84, 0x50, 0x51, 0x85, 0x85, 0x4E,
0x04, 0x84, 0x00, 0x04, 0x4F, 0x85, 0x85, 0x53, 0x05, 0x84, 0x00, 0x05, 0x4F, 0x85, 0x85, 0x85,
0x5D, 0x00, 0x04, 0x84, 0x0A, 0x85, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x06, 0x85, 0x00, 0x06,
0x51, 0x50, 0x84, 0x84, 0x84, 0x4D, 0x12, 0x85, 0x01, 0x51, 0x04, 0x84, 0x00, 0x05, 0x5D, 0x85,
0x85, 0x85, 0x51, 0x00, 0x04, 0x84, 0x00, 0x05, 0x5D, 0x85, 0x85, 0x85, 0x4D, 0x00, 0x04, 0x84,
0x04, 0x85, 0x00, 0x04, 0x84, 0x84, 0x84, 0x4F, 0x06, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x05,
0x5E, 0x85, 0x85, 0x85, 0x4D, 0x00, 0x04, 0x84, 0x00, 0x06, 0x59, 0x51, 0x85, 0x85, 0x51, 0x59,
0x04, 0x84, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x10, 0x82, 0x01, 0x14, 0x01, 0x67,
0x07, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x06, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x19, 0x06, 0x85,
0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0D, 0x80, 0x00, 0x04, 0x26, 0x85,
0x85, 0x6A, 0x06, 0x80, 0x01, 0x69, 0x04, 0x85, 0x01, 0x69, 0x0C, 0x80, 0x00, 0x08, 0x2F, 0x30,
0x22, 0x00, 0x36, 0x36, 0x36, 0x35, 0x0D, 0x85, 0x04, 0x84, 0x01, 0x4D, 0x05, 0x85, 0x01, 0x4E,
0x04, 0x84, 0x01, 0x4E, 0x04, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x5E, 0x85, 0x85, 0x4E,
0x04, 0x84, 0x00, 0x04, 0x4F, 0x85, 0x85, 0x5A, 0x05, 0x84, 0x00, 0x05, 0x51, 0x85, 0x85, 0x85,
0x4F, 0x00, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x85, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x06, 0x85,
0x01, 0x58, 0x04, 0x84, 0x01, 0x4D, 0x12, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x85,
0x85, 0x85, 0x4E, 0x00, 0x04, 0x84, 0x00, 0x04, 0x4F, 0x85, 0x85, 0x85, 0x04, 0x84, 0x00, 0x09,
0x4D, 0x85, 0x85, 0x85, 0x53, 0x84, 0x84, 0x84, 0x52, 0x00, 0x05, 0x85, 0x01, 0x57, 0x05, 0x84,
0x00, 0x04, 0x4E, 0x85, 0x85, 0x4E, 0x04, 0x84, 0x01, 0x59, 0x01, 0x51, 0x04, 0x85, 0x00, 0x05,
0x5E, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0F, 0x82,
0x01, 0x1D, 0x09, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x06, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x03,
0x06, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0D, 0x80, 0x00, 0x05,
0x24, 0x85, 0x85, 0x85, 0x09, 0x00, 0x05, 0x80, 0x00, 0x05, 0x16, 0x85, 0x85, 0x85, 0x6E, 0x00,
0x0D, 0x80, 0x00, 0x08, 0x2F, 0x30, 0x22, 0x15, 0x36, 0x36, 0x36, 0x19, 0x0D, 0x85, 0x01, 0x4D,
0x04, 0x84, 0x05, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x57, 0x05, 0x85, 0x00, 0x08, 0x56, 0x84,
0x84, 0x84, 0x56, 0x85, 0x85, 0x85, 0x04, 0x84, 0x00, 0x04, 0x5D, 0x85, 0x51, 0x50, 0x04, 0x84,
0x01, 0x58, 0x04, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x85, 0x00, 0x04, 0x4F, 0x84,
0x84, 0x84, 0x05, 0x85, 0x01, 0x53, 0x05, 0x84, 0x01, 0x4D, 0x12, 0x85, 0x01, 0x4E, 0x04, 0x84,
0x00, 0x05, 0x4F, 0x85, 0x85, 0x85, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x85, 0x85, 0x51,
0x04, 0x84, 0x00, 0x09, 0x5D, 0x85, 0x85, 0x85, 0x4E, 0x84, 0x84, 0x84, 0x4E, 0x00, 0x05, 0x85,
0x01, 0x59, 0x05, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4D, 0x04, 0x84, 0x01, 0x57, 0x05, 0x85,
0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5E, 0x00, 0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0E, 0x82, 0x01, 0x14, 0x04, 0x85, 0x00, 0x07, 0x6D, 0x2C, 0x11, 0x11, 0x14, 0x70, 0x14, 0x00,
0x0F, 0x82, 0x00, 0x06, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x03, 0x06, 0x85, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0E, 0x80, 0x00, 0x04, 0x63, 0x85, 0x85, 0x26, 0x05, 0x09,
0x00, 0x05, 0x6E, 0x85, 0x85, 0x85, 0x16, 0x00, 0x0D, 0x80, 0x00, 0x08, 0x2F, 0x30, 0x22, 0x00,
0x36, 0x36, 0x36, 0x03, 0x0D, 0x85, 0x01, 0x5A, 0x04, 0x84, 0x01, 0x57, 0x04, 0x85, 0x01, 0x4E,
0x04, 0x84, 0x01, 0x4E, 0x05, 0x85, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x03, 0x57, 0x85, 0x85, 0x00,
0x04, 0x84, 0x00, 0x03, 0x4D, 0x85, 0x52, 0x00, 0x05, 0x84, 0x01, 0x53, 0x04, 0x85, 0x01, 0x4F,
0x04, 0x84, 0x01, 0x4E, 0x09, 0x85, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x84, 0x05, 0x85, 0x01, 0x58,
0x05, 0x84, 0x01, 0x4D, 0x12, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x05, 0x52, 0x85, 0x85, 0x85,
0x5D, 0x00, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4E, 0x04, 0x84, 0x00, 0x08, 0x4F, 0x85,
0x85, 0x85, 0x5E, 0x84, 0x84, 0x84, 0x05, 0x85, 0x01, 0x5A, 0x05, 0x84, 0x00, 0x04, 0x59, 0x85,
0x85, 0x57, 0x04, 0x84, 0x01, 0x58, 0x06, 0x85, 0x00, 0x05, 0x56, 0x84, 0x84, 0x84, 0x57, 0x00,
0x0E, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x07, 0x64, 0x67, 0x85, 0x85,
0x85, 0x74, 0x64, 0x00, 0x15, 0x82, 0x00, 0x06, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x05, 0x06, 0x85,
0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0E, 0x80, 0x01, 0x26, 0x0C, 0x85,
0x01, 0x69, 0x0D, 0x80, 0x00, 0x08, 0x2F, 0x30, 0x22, 0x00, 0x36, 0x36, 0x36, 0x05, 0x0D, 0x85,
0x01, 0x52, 0x04, 0x84, 0x01, 0x52, 0x04, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x05, 0x85,
0x01, 0x4E, 0x04, 0x84, 0x00, 0x0A, 0x4F, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x56, 0x85, 0x56,
0x04, 0x84, 0x01, 0x5D, 0x05, 0x85, 0x01, 0x52, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x85, 0x00, 0x04,
0x4F, 0x84, 0x84, 0x84, 0x04, 0x85, 0x01, 0x53, 0x06, 0x84, 0x01, 0x4D, 0x12, 0x85, 0x01, 0x4F,
0x04, 0x84, 0x00, 0x0D, 0x4E, 0x85, 0x85, 0x85, 0x50, 0x84, 0x84, 0x84, 0x5D, 0x85, 0x85, 0x85,
0x5C, 0x00, 0x04, 0x84, 0x00, 0x08, 0x52, 0x85, 0x85, 0x85, 0x5A, 0x84, 0x84, 0x56, 0x04, 0x85,
0x01, 0x4E, 0x06, 0x84, 0x00, 0x04, 0x58, 0x85, 0x85, 0x58, 0x04, 0x84, 0x01, 0x4E, 0x05, 0x85,
0x00, 0x05, 0x53, 0x84, 0x84, 0x84, 0x50, 0x00, 0x0F, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0D, 0x82, 0x01, 0x2C, 0x04, 0x85, 0x01, 0x11, 0x16, 0x82, 0x00, 0x06, 0x1F, 0x12, 0x71, 0x36,
0x36, 0x36, 0x06, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0E, 0x80,
0x01, 0x24, 0x0B, 0x85, 0x01, 0x6E, 0x0E, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x15, 0x04, 0x36,
0x01, 0x35, 0x0C, 0x85, 0x01, 0x53, 0x04, 0x84, 0x01, 0x5A, 0x04, 0x85, 0x01, 0x4E, 0x04, 0x84,
0x01, 0x52, 0x06, 0x85, 0x04, 0x84, 0x00, 0x04, 0x4D, 0x85, 0x85, 0x4D, 0x04, 0x84, 0x01, 0x58,
0x05, 0x84, 0x01, 0x4E, 0x05, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x52, 0x09, 0x85, 0x00, 0x04,
0x4F, 0x84, 0x84, 0x84, 0x04, 0x85, 0x01, 0x58, 0x06, 0x84, 0x01, 0x4D, 0x12, 0x85, 0x01, 0x4F,
0x04, 0x84, 0x00, 0x04, 0x4E, 0x85, 0x85, 0x5C, 0x04, 0x84, 0x00, 0x05, 0x52, 0x85, 0x85, 0x85,
0x4F, 0x00, 0x04, 0x84, 0x00, 0x0D, 0x4E, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4D, 0x85, 0x85,
0x85, 0x51, 0x56, 0x00, 0x06, 0x84, 0x00, 0x08, 0x5E, 0x85, 0x85, 0x50, 0x84, 0x84, 0x84, 0x56,
0x06, 0x85, 0x00, 0x05, 0x52, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x0F, 0x85, 0x00, 0x04, 0x2D, 0x22,
0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x1D, 0x85, 0x85, 0x85, 0x6D, 0x00, 0x17, 0x82, 0x00, 0x07,
0x1F, 0x12, 0x71, 0x36, 0x36, 0x36, 0x35, 0x00, 0x05, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03,
0x22, 0x1F, 0x33, 0x00, 0x0F, 0x80, 0x00, 0x0C, 0x63, 0x85, 0x85, 0x61, 0x16, 0x16, 0x16, 0x63,
0x85, 0x85, 0x85, 0x16, 0x0E, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00, 0x04, 0x36, 0x01, 0x19,
0x0D, 0x85, 0x00, 0x05, 0x50, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x04, 0x85, 0x01, 0x4E, 0x04, 0x84,
0x01, 0x4F, 0x06, 0x85, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x85, 0x85, 0x4F, 0x09, 0x84,
0x01, 0x4D, 0x06, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4F, 0x09, 0x85, 0x00, 0x08, 0x4E, 0x84,
0x84, 0x84, 0x85, 0x85, 0x85, 0x57, 0x07, 0x84, 0x00, 0x04, 0x4D, 0x85, 0x85, 0x52, 0x0C, 0x4D,
0x00, 0x04, 0x5C, 0x85, 0x85, 0x4F, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4D, 0x04, 0x84,
0x00, 0x05, 0x51, 0x85, 0x85, 0x85, 0x58, 0x00, 0x04, 0x84, 0x00, 0x0C, 0x51, 0x85, 0x85, 0x85,
0x50, 0x84, 0x84, 0x4F, 0x85, 0x85, 0x85, 0x5D, 0x07, 0x84, 0x00, 0x03, 0x4E, 0x85, 0x57, 0x00,
0x04, 0x84, 0x01, 0x5A, 0x06, 0x85, 0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5E, 0x00, 0x0F, 0x85,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x70, 0x00,
0x17, 0x82, 0x00, 0x07, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x36, 0x19, 0x00, 0x05, 0x85, 0x00, 0x00,
0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0F, 0x80, 0x00, 0x07, 0x26, 0x85, 0x85, 0x77,
0x80, 0x80, 0x69, 0x00, 0x04, 0x85, 0x01, 0x69, 0x0E, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x00,
0x04, 0x36, 0x01, 0x05, 0x0D, 0x85, 0x01, 0x4D, 0x04, 0x84, 0x05, 0x85, 0x04, 0x84, 0x01, 0x58,
0x06, 0x85, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x03, 0x53, 0x85, 0x4F, 0x00, 0x09, 0x84, 0x01, 0x52,
0x06, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4F, 0x09, 0x85, 0x00, 0x08, 0x4E, 0x84, 0x84, 0x84,
0x85, 0x85, 0x85, 0x4D, 0x07, 0x84, 0x00, 0x04, 0x4D, 0x85, 0x85, 0x5A, 0x0C, 0x84, 0x00, 0x04,
0x4E, 0x85, 0x85, 0x4D, 0x04, 0x84, 0x00, 0x03, 0x85, 0x85, 0x5C, 0x00, 0x04, 0x84, 0x01, 0x58,
0x04, 0x85, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x00, 0x04, 0x85, 0x00, 0x07, 0x84, 0x84,
0x84, 0x52, 0x85, 0x85, 0x5C, 0x00, 0x08, 0x84, 0x00, 0x03, 0x85, 0x85, 0x4F, 0x00, 0x04, 0x84,
0x00, 0x0C, 0x4E, 0x85, 0x85, 0x85, 0x5E, 0x4F, 0x4F, 0x56, 0x84, 0x84, 0x84, 0x57, 0x0F, 0x85,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x14, 0x00,
0x17, 0x82, 0x00, 0x07, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x36, 0x03, 0x00, 0x05, 0x85, 0x00, 0x00,
0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x0F, 0x80, 0x00, 0x0B, 0x24, 0x85, 0x85, 0x85,
0x69, 0x80, 0x16, 0x85, 0x85, 0x85, 0x77, 0x00, 0x0F, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x15,
0x05, 0x36, 0x0D, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x01, 0x57, 0x04, 0x85, 0x00, 0x05, 0x50, 0x84,
0x84, 0x84, 0x4D, 0x00, 0x06, 0x85, 0x01, 0x52, 0x04, 0x84, 0x00, 0x03, 0x4E, 0x85, 0x4E, 0x00,
0x08, 0x84, 0x01, 0x56, 0x08, 0x85, 0x08, 0x84, 0x00, 0x0D, 0x59, 0x4D, 0x57, 0x85, 0x85, 0x85,
0x4E, 0x84, 0x84, 0x84, 0x85, 0x85, 0x4E, 0x00, 0x05, 0x84, 0x00, 0x07, 0x56, 0x84, 0x84, 0x4D,
0x85, 0x85, 0x4D, 0x00, 0x0C, 0x84, 0x00, 0x04, 0x4E, 0x85, 0x85, 0x4D, 0x04, 0x84, 0x00, 0x08,
0x4E, 0x5E, 0x50, 0x84, 0x84, 0x84, 0x50, 0x53, 0x04, 0x85, 0x00, 0x10, 0x56, 0x84, 0x84, 0x84,
0x4D, 0x85, 0x85, 0x85, 0x4E, 0x84, 0x84, 0x84, 0x4E, 0x85, 0x51, 0x50, 0x04, 0x84, 0x00, 0x0F,
0x50, 0x84, 0x84, 0x59, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x85, 0x85, 0x85, 0x51, 0x00,
0x06, 0x84, 0x01, 0x50, 0x10, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05,
0x60, 0x85, 0x85, 0x85, 0x14, 0x00, 0x17, 0x82, 0x00, 0x07, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x36,
0x05, 0x00, 0x05, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x10, 0x80,
0x00, 0x0A, 0x63, 0x85, 0x85, 0x24, 0x80, 0x6E, 0x85, 0x85, 0x85, 0x24, 0x0F, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x00, 0x05, 0x36, 0x01, 0x19, 0x0C, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x52,
0x04, 0x85, 0x01, 0x4D, 0x04, 0x84, 0x06, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x03, 0x4F, 0x85,
0x4E, 0x00, 0x08, 0x84, 0x01, 0x5E, 0x08, 0x85, 0x0A, 0x84, 0x00, 0x0B, 0x52, 0x85, 0x85, 0x85,
0x4E, 0x84, 0x84, 0x84, 0x85, 0x85, 0x4D, 0x00, 0x04, 0x84, 0x00, 0x08, 0x58, 0x4D, 0x84, 0x84,
0x4D, 0x85, 0x85, 0x4D, 0x0C, 0x84, 0x00, 0x04, 0x4E, 0x85, 0x85, 0x4D, 0x0A, 0x84, 0x01, 0x52,
0x05, 0x85, 0x04, 0x84, 0x00, 0x0B, 0x58, 0x85, 0x85, 0x85, 0x52, 0x84, 0x84, 0x84, 0x85, 0x85,
0x4D, 0x00, 0x04, 0x84, 0x00, 0x07, 0x5D, 0x59, 0x84, 0x84, 0x58, 0x85, 0x85, 0x00, 0x04, 0x84,
0x00, 0x05, 0x4D, 0x85, 0x85, 0x85, 0x5C, 0x00, 0x06, 0x84, 0x01, 0x58, 0x10, 0x85, 0x00, 0x04,
0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82, 0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x14, 0x00, 0x17, 0x82,
0x00, 0x07, 0x1F, 0x12, 0x71, 0x36, 0x36, 0x36, 0x05, 0x00, 0x05, 0x85, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x10, 0x80, 0x00, 0x05, 0x26, 0x85, 0x85, 0x77, 0x69, 0x00,
0x04, 0x85, 0x01, 0x69, 0x0F, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x0C, 0x05, 0x05, 0x01, 0x35,
0x0C, 0x85, 0x01, 0x51, 0x04, 0x84, 0x01, 0x5A, 0x04, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x01, 0x53,
0x05, 0x85, 0x01, 0x51, 0x04, 0x84, 0x00, 0x03, 0x4F, 0x85, 0x85, 0x00, 0x07, 0x84, 0x01, 0x50,
0x01, 0x51, 0x08, 0x85, 0x0A, 0x84, 0x00, 0x0A, 0x4F, 0x85, 0x85, 0x85, 0x4E, 0x84, 0x84, 0x84,
0x85, 0x4E, 0x05, 0x84, 0x00, 0x08, 0x53, 0x4D, 0x84, 0x84, 0x5A, 0x85, 0x85, 0x4D, 0x0C, 0x84,
0x00, 0x04, 0x51, 0x85, 0x85, 0x50, 0x09, 0x84, 0x01, 0x52, 0x05, 0x85, 0x01, 0x53, 0x04, 0x84,
0x00, 0x0A, 0x4F, 0x85, 0x85, 0x85, 0x4F, 0x84, 0x84, 0x56, 0x85, 0x5E, 0x04, 0x84, 0x00, 0x08,
0x50, 0x51, 0x84, 0x84, 0x84, 0x5E, 0x85, 0x57, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x85, 0x85, 0x85,
0x4F, 0x00, 0x06, 0x84, 0x01, 0x52, 0x10, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0D, 0x82,
0x00, 0x05, 0x60, 0x85, 0x85, 0x85, 0x60, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x04, 0x36, 0x00, 0x05, 0x35, 0x85, 0x85, 0x85, 0x85, 0x00, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03,
0x22, 0x1F, 0x33, 0x00, 0x10, 0x80, 0x00, 0x09, 0x24, 0x85, 0x85, 0x63, 0x16, 0x85, 0x85, 0x85,
0x77, 0x00, 0x10, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x85, 0x00, 0x05, 0x56, 0x84,
0x84, 0x84, 0x4D, 0x00, 0x04, 0x85, 0x01, 0x5C, 0x04, 0x84, 0x01, 0x4E, 0x06, 0x85, 0x04, 0x84,
0x00, 0x03, 0x4D, 0x85, 0x85, 0x00, 0x07, 0x84, 0x01, 0x56, 0x01, 0x51, 0x08, 0x85, 0x01, 0x56,
0x09, 0x84, 0x00, 0x0A, 0x4F, 0x85, 0x85, 0x85, 0x4E, 0x84, 0x84, 0x84, 0x85, 0x4D, 0x04, 0x84,
0x00, 0x09, 0x58, 0x85, 0x4D, 0x84, 0x84, 0x4F, 0x85, 0x85, 0x57, 0x00, 0x07, 0x4E, 0x05, 0x4F,
0x00, 0x03, 0x85, 0x85, 0x85, 0x00, 0x09, 0x84, 0x01, 0x4D, 0x01, 0x53, 0x05, 0x85, 0x01, 0x4E,
0x04, 0x84, 0x00, 0x0A, 0x5C, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4D, 0x57, 0x50, 0x04, 0x84,
0x00, 0x08, 0x5C, 0x57, 0x84, 0x84, 0x84, 0x4E, 0x85, 0x5E, 0x04, 0x84, 0x00, 0x05, 0x4E, 0x85,
0x85, 0x85, 0x5A, 0x00, 0x06, 0x4D, 0x01, 0x53, 0x10, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0D, 0x82, 0x00, 0x05, 0x14, 0x85, 0x85, 0x85, 0x67, 0x00, 0x17, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x04, 0x36, 0x00, 0x05, 0x19, 0x85, 0x85, 0x85, 0x85, 0x00, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x11, 0x80, 0x01, 0x63, 0x06, 0x85, 0x01, 0x24, 0x10, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x85, 0x01, 0x58, 0x04, 0x84, 0x04, 0x85, 0x01, 0x53,
0x04, 0x84, 0x01, 0x4F, 0x06, 0x85, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x85, 0x85, 0x4D,
0x07, 0x84, 0x01, 0x4F, 0x08, 0x85, 0x01, 0x4D, 0x09, 0x84, 0x00, 0x09, 0x4F, 0x85, 0x85, 0x85,
0x4E, 0x84, 0x84, 0x84, 0x52, 0x00, 0x05, 0x84, 0x00, 0x06, 0x53, 0x85, 0x4D, 0x84, 0x84, 0x4F,
0x12, 0x85, 0x0B, 0x84, 0x01, 0x5C, 0x04, 0x85, 0x01, 0x5E, 0x04, 0x84, 0x00, 0x09, 0x4E, 0x85,
0x85, 0x85, 0x59, 0x84, 0x84, 0x4F, 0x59, 0x00, 0x04, 0x84, 0x00, 0x09, 0x5D, 0x85, 0x52, 0x84,
0x84, 0x84, 0x85, 0x85, 0x5A, 0x00, 0x04, 0x84, 0x01, 0x51, 0x1B, 0x85, 0x00, 0x04, 0x2D, 0x22,
0x30, 0x5B, 0x0D, 0x82, 0x01, 0x11, 0x04, 0x85, 0x01, 0x14, 0x16, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x04, 0x36, 0x00, 0x05, 0x03, 0x85, 0x85, 0x85, 0x85, 0x00, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x11, 0x80, 0x01, 0x26, 0x05, 0x85, 0x01, 0x63, 0x11, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x85, 0x01, 0x5E, 0x04, 0x84, 0x01, 0x57, 0x04, 0x85,
0x00, 0x05, 0x56, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x06, 0x85, 0x00, 0x11, 0x4D, 0x84, 0x84, 0x84,
0x59, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x50, 0x84, 0x84, 0x84, 0x53, 0x00, 0x07, 0x85,
0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x08, 0x84, 0x00, 0x07,
0x58, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4F, 0x00, 0x11, 0x85, 0x01, 0x57, 0x04, 0x84, 0x00, 0x03,
0x4D, 0x4F, 0x5A, 0x00, 0x04, 0x84, 0x01, 0x56, 0x04, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x04, 0x85,
0x00, 0x04, 0x84, 0x84, 0x84, 0x56, 0x04, 0x84, 0x00, 0x0E, 0x50, 0x51, 0x85, 0x5A, 0x84, 0x84,
0x59, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0E, 0x82, 0x00, 0x06, 0x60, 0x85, 0x85, 0x85, 0x67, 0x11, 0x15, 0x82, 0x00, 0x03, 0x1F, 0x12,
0x71, 0x00, 0x04, 0x36, 0x00, 0x05, 0x03, 0x85, 0x85, 0x85, 0x85, 0x00, 0x00, 0x00, 0x08, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x11, 0x80, 0x01, 0x24, 0x05, 0x85, 0x01, 0x26, 0x11, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x13, 0x85, 0x01, 0x57, 0x04, 0x84, 0x01, 0x52, 0x04, 0x85,
0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x50, 0x00, 0x06, 0x85, 0x01, 0x5A, 0x04, 0x84, 0x00, 0x03,
0x85, 0x85, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x07, 0x85,
0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x08, 0x84, 0x00, 0x07,
0x53, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4F, 0x00, 0x11, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04,
0x4E, 0x85, 0x85, 0x5E, 0x04, 0x84, 0x00, 0x0D, 0x57, 0x85, 0x85, 0x85, 0x5D, 0x84, 0x84, 0x84,
0x50, 0x85, 0x85, 0x85, 0x57, 0x00, 0x08, 0x84, 0x00, 0x0E, 0x5C, 0x85, 0x85, 0x4D, 0x84, 0x84,
0x5A, 0x85, 0x85, 0x56, 0x84, 0x84, 0x84, 0x4D, 0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B,
0x0E, 0x82, 0x01, 0x11, 0x01, 0x67, 0x04, 0x85, 0x00, 0x06, 0x1D, 0x2C, 0x2C, 0x14, 0x70, 0x14,
0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x04, 0x36, 0x00, 0x05, 0x05, 0x85, 0x85, 0x85,
0x85, 0x00, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x12, 0x80, 0x01, 0x63,
0x04, 0x85, 0x01, 0x24, 0x11, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x85, 0x04, 0x84,
0x01, 0x5A, 0x04, 0x85, 0x01, 0x5C, 0x04, 0x84, 0x01, 0x53, 0x05, 0x85, 0x01, 0x4F, 0x04, 0x84,
0x00, 0x03, 0x85, 0x85, 0x4F, 0x00, 0x04, 0x84, 0x00, 0x06, 0x51, 0x56, 0x84, 0x84, 0x84, 0x5C,
0x06, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x09, 0x85, 0x01, 0x4E, 0x07, 0x84, 0x00, 0x08, 0x58, 0x85,
0x85, 0x85, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x85,
0x85, 0x53, 0x04, 0x84, 0x00, 0x0D, 0x4E, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x85,
0x85, 0x85, 0x5C, 0x00, 0x07, 0x84, 0x00, 0x0A, 0x5A, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x52,
0x85, 0x85, 0x04, 0x84, 0x01, 0x4D, 0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x0F, 0x82,
0x01, 0x11, 0x01, 0x67, 0x08, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00,
0x05, 0x36, 0x04, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x12, 0x80,
0x00, 0x05, 0x26, 0x85, 0x85, 0x85, 0x63, 0x00, 0x12, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D,
0x14, 0x85, 0x00, 0x05, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x00, 0x05, 0x85, 0x00, 0x05, 0x50, 0x84,
0x84, 0x84, 0x5E, 0x00, 0x05, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x03, 0x85, 0x85, 0x4E, 0x00,
0x04, 0x84, 0x00, 0x07, 0x4E, 0x5C, 0x84, 0x84, 0x84, 0x56, 0x51, 0x00, 0x05, 0x85, 0x01, 0x4F,
0x04, 0x84, 0x09, 0x85, 0x01, 0x53, 0x07, 0x84, 0x00, 0x08, 0x53, 0x85, 0x85, 0x85, 0x4D, 0x84,
0x84, 0x4F, 0x11, 0x85, 0x01, 0x52, 0x04, 0x84, 0x00, 0x04, 0x57, 0x85, 0x85, 0x53, 0x04, 0x84,
0x00, 0x04, 0x4E, 0x85, 0x85, 0x85, 0x04, 0x84, 0x00, 0x05, 0x58, 0x85, 0x85, 0x85, 0x4F, 0x00,
0x06, 0x84, 0x00, 0x0B, 0x56, 0x51, 0x85, 0x85, 0x57, 0x84, 0x84, 0x84, 0x57, 0x85, 0x85, 0x00,
0x04, 0x84, 0x01, 0x5A, 0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x10, 0x82, 0x01, 0x11,
0x01, 0x60, 0x07, 0x85, 0x01, 0x14, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x05, 0x36,
0x00, 0x04, 0x19, 0x85, 0x85, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x12, 0x80, 0x00, 0x05, 0x09, 0x16, 0x16, 0x16, 0x24, 0x00, 0x12, 0x80, 0x00, 0x04, 0x2F, 0x30,
0x22, 0x2D, 0x14, 0x85, 0x01, 0x5A, 0x04, 0x84, 0x05, 0x85, 0x00, 0x05, 0x58, 0x84, 0x84, 0x84,
0x5D, 0x00, 0x05, 0x85, 0x00, 0x08, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x85, 0x85, 0x4E, 0x04, 0x84,
0x00, 0x07, 0x4E, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x4F, 0x00, 0x05, 0x85, 0x01, 0x4F, 0x04, 0x84,
0x0A, 0x85, 0x06, 0x84, 0x01, 0x58, 0x04, 0x85, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x85,
0x01, 0x4F, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4E, 0x04, 0x84, 0x00, 0x04, 0x4E, 0x85,
0x85, 0x85, 0x04, 0x84, 0x00, 0x05, 0x4F, 0x85, 0x85, 0x85, 0x5D, 0x00, 0x06, 0x84, 0x00, 0x0B,
0x4E, 0x85, 0x85, 0x85, 0x52, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x00, 0x04, 0x84, 0x01, 0x4D,
0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x12, 0x82, 0x00, 0x08, 0x11, 0x14, 0x1D, 0x60,
0x1D, 0x14, 0x2C, 0x64, 0x0F, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x05, 0x36, 0x00, 0x04,
0x19, 0x85, 0x85, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x29, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x85, 0x01, 0x5C, 0x04, 0x84, 0x01, 0x57, 0x04, 0x85,
0x01, 0x53, 0x04, 0x84, 0x01, 0x53, 0x04, 0x85, 0x00, 0x08, 0x4F, 0x84, 0x84, 0x84, 0x4D, 0x85,
0x85, 0x85, 0x04, 0x84, 0x00, 0x03, 0x4F, 0x85, 0x4E, 0x00, 0x04, 0x84, 0x01, 0x53, 0x04, 0x85,
0x01, 0x52, 0x04, 0x84, 0x01, 0x51, 0x09, 0x85, 0x06, 0x84, 0x01, 0x53, 0x04, 0x85, 0x00, 0x04,
0x4D, 0x84, 0x84, 0x4F, 0x11, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x52,
0x04, 0x84, 0x00, 0x04, 0x53, 0x85, 0x85, 0x4E, 0x04, 0x84, 0x00, 0x05, 0x5C, 0x85, 0x85, 0x85,
0x4D, 0x00, 0x05, 0x84, 0x01, 0x5A, 0x04, 0x85, 0x00, 0x07, 0x5A, 0x84, 0x84, 0x4D, 0x85, 0x85,
0x85, 0x00, 0x04, 0x84, 0x01, 0x59, 0x1C, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x05, 0x36, 0x00, 0x04, 0x03, 0x85, 0x85, 0x85, 0x00, 0x00,
0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x04, 0x80, 0x00, 0x21, 0x69, 0x09, 0x09, 0x69,
0x80, 0x80, 0x09, 0x09, 0x80, 0x09, 0x69, 0x80, 0x80, 0x09, 0x09, 0x80, 0x09, 0x09, 0x80, 0x69,
0x09, 0x69, 0x80, 0x69, 0x09, 0x09, 0x80, 0x80, 0x09, 0x69, 0x80, 0x80, 0x09, 0x00, 0x04, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x14, 0x85, 0x01, 0x53, 0x04, 0x84, 0x01, 0x52, 0x05, 0x85,
0x00, 0x05, 0x58, 0x84, 0x84, 0x84, 0x5D, 0x00, 0x04, 0x85, 0x00, 0x08, 0x5D, 0x84, 0x84, 0x84,
0x5A, 0x85, 0x85, 0x85, 0x04, 0x84, 0x00, 0x08, 0x4F, 0x85, 0x85, 0x58, 0x84, 0x84, 0x84, 0x4D,
0x04, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x4E, 0x09, 0x85, 0x05, 0x84, 0x01, 0x58, 0x05, 0x85,
0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x85, 0x00, 0x09, 0x58, 0x84, 0x84, 0x84, 0x56, 0x85,
0x85, 0x85, 0x5D, 0x00, 0x04, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x5C, 0x04, 0x84, 0x00, 0x04,
0x57, 0x85, 0x85, 0x85, 0x05, 0x84, 0x01, 0x56, 0x01, 0x51, 0x04, 0x85, 0x00, 0x07, 0x4D, 0x84,
0x84, 0x5A, 0x85, 0x85, 0x85, 0x00, 0x05, 0x84, 0x01, 0x53, 0x1B, 0x85, 0x00, 0x28, 0x2D, 0x22,
0x30, 0x5B, 0x82, 0x82, 0x82, 0x11, 0x11, 0x11, 0x82, 0x82, 0x64, 0x11, 0x68, 0x68, 0x11, 0x82,
0x82, 0x64, 0x11, 0x68, 0x68, 0x11, 0x64, 0x82, 0x11, 0x11, 0x82, 0x82, 0x11, 0x11, 0x68, 0x82,
0x64, 0x11, 0x82, 0x82, 0x64, 0x68, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x05, 0x36,
0x00, 0x04, 0x05, 0x85, 0x85, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x04, 0x80, 0x00, 0x21, 0x85, 0x6A, 0x63, 0x85, 0x24, 0x80, 0x61, 0x61, 0x80, 0x6E, 0x26, 0x80,
0x69, 0x85, 0x26, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x09, 0x63, 0x6E, 0x63, 0x6E, 0x69,
0x85, 0x09, 0x80, 0x16, 0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x85,
0x04, 0x4D, 0x04, 0x84, 0x00, 0x07, 0x56, 0x4D, 0x5A, 0x4F, 0x52, 0x85, 0x53, 0x00, 0x04, 0x84,
0x00, 0x04, 0x58, 0x51, 0x85, 0x52, 0x04, 0x84, 0x00, 0x15, 0x52, 0x85, 0x85, 0x85, 0x4D, 0x84,
0x84, 0x84, 0x5D, 0x85, 0x85, 0x53, 0x50, 0x84, 0x84, 0x84, 0x5C, 0x85, 0x85, 0x85, 0x4E, 0x00,
0x04, 0x84, 0x01, 0x5E, 0x06, 0x4E, 0x00, 0x03, 0x53, 0x85, 0x85, 0x00, 0x05, 0x84, 0x01, 0x53,
0x05, 0x85, 0x00, 0x04, 0x4D, 0x84, 0x84, 0x4F, 0x11, 0x85, 0x00, 0x08, 0x4D, 0x84, 0x84, 0x84,
0x4D, 0x85, 0x85, 0x52, 0x04, 0x84, 0x00, 0x05, 0x59, 0x85, 0x85, 0x85, 0x4F, 0x00, 0x04, 0x84,
0x00, 0x04, 0x85, 0x85, 0x85, 0x53, 0x05, 0x84, 0x01, 0x4E, 0x05, 0x85, 0x00, 0x08, 0x50, 0x84,
0x84, 0x52, 0x85, 0x85, 0x85, 0x4D, 0x04, 0x84, 0x00, 0x08, 0x4D, 0x51, 0x85, 0x85, 0x85, 0x4E,
0x4D, 0x53, 0x14, 0x85, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x11, 0x85, 0x74, 0x85,
0x67, 0x68, 0x11, 0x85, 0x14, 0x11, 0x85, 0x11, 0x82, 0x1D, 0x85, 0x11, 0x14, 0x85, 0x11, 0x82,
0x60, 0x85, 0x82, 0x1D, 0x85, 0x74, 0x85, 0x14, 0x11, 0x85, 0x82, 0x64, 0x74, 0x14, 0x05, 0x82,
0x00, 0x03, 0x1F, 0x12, 0x71, 0x00, 0x05, 0x36, 0x00, 0x04, 0x05, 0x85, 0x85, 0x85, 0x00, 0x00,
0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x04, 0x80, 0x00, 0x21, 0x69, 0x80, 0x69, 0x85,
0x61, 0x80, 0x61, 0x61, 0x80, 0x16, 0x63, 0x61, 0x6E, 0x85, 0x09, 0x80, 0x85, 0x61, 0x80, 0x09,
0x85, 0x09, 0x77, 0x63, 0x80, 0x24, 0x85, 0x24, 0x85, 0x09, 0x24, 0x85, 0x85, 0x00, 0x04, 0x80,
0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x85, 0x01, 0x59, 0x0B, 0x84, 0x00, 0x04, 0x59, 0x85,
0x85, 0x4F, 0x0B, 0x84, 0x00, 0x15, 0x51, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x85,
0x85, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x56, 0x51, 0x85, 0x85, 0x4E, 0x00, 0x0B, 0x84, 0x00, 0x03,
0x4F, 0x85, 0x85, 0x00, 0x04, 0x84, 0x01, 0x58, 0x06, 0x85, 0x00, 0x04, 0x50, 0x84, 0x84, 0x5E,
0x11, 0x85, 0x00, 0x07, 0x4D, 0x84, 0x84, 0x84, 0x50, 0x4D, 0x56, 0x00, 0x05, 0x84, 0x00, 0x0D,
0x5A, 0x85, 0x85, 0x85, 0x5A, 0x84, 0x84, 0x84, 0x56, 0x85, 0x85, 0x85, 0x4E, 0x00, 0x04, 0x84,
0x01, 0x4F, 0x05, 0x85, 0x00, 0x09, 0x53, 0x84, 0x84, 0x84, 0x57, 0x85, 0x85, 0x85, 0x5A, 0x00,
0x05, 0x84, 0x00, 0x06, 0x56, 0x5A, 0x5A, 0x59, 0x84, 0x56, 0x15, 0x85, 0x00, 0x28, 0x2D, 0x22,
0x30, 0x5B, 0x82, 0x82, 0x64, 0x82, 0x82, 0x1D, 0x85, 0x11, 0x11, 0x85, 0x14, 0x82, 0x6D, 0x6D,
0x60, 0x67, 0x6D, 0x82, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85, 0x68, 0x85, 0x1D, 0x82, 0x60, 0x85,
0x11, 0x85, 0x82, 0x60, 0x85, 0x14, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x18, 0x00, 0x05, 0x05,
0x00, 0x04, 0x03, 0x85, 0x85, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x05, 0x80, 0x00, 0x20, 0x26, 0x63, 0x85, 0x16, 0x80, 0x61, 0x61, 0x80, 0x69, 0x85, 0x16, 0x6A,
0x6A, 0x80, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x61, 0x61, 0x80, 0x09, 0x85, 0x16, 0x85,
0x16, 0x85, 0x63, 0x85, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x85, 0x01, 0x58,
0x0C, 0x84, 0x00, 0x04, 0x85, 0x85, 0x85, 0x4D, 0x09, 0x84, 0x01, 0x58, 0x04, 0x85, 0x00, 0x11,
0x4F, 0x84, 0x84, 0x84, 0x56, 0x85, 0x85, 0x85, 0x51, 0x56, 0x84, 0x84, 0x84, 0x4F, 0x85, 0x85,
0x51, 0x00, 0x0B, 0x84, 0x00, 0x03, 0x4F, 0x85, 0x85, 0x00, 0x04, 0x84, 0x01, 0x53, 0x06, 0x85,
0x00, 0x04, 0x84, 0x84, 0x84, 0x4E, 0x11, 0x85, 0x01, 0x56, 0x0B, 0x84, 0x00, 0x11, 0x53, 0x85,
0x85, 0x85, 0x4D, 0x84, 0x84, 0x84, 0x4D, 0x85, 0x85, 0x85, 0x4F, 0x84, 0x84, 0x84, 0x59, 0x00,
0x06, 0x85, 0x00, 0x04, 0x5C, 0x84, 0x84, 0x84, 0x04, 0x85, 0x01, 0x57, 0x0A, 0x84, 0x01, 0x58,
0x15, 0x85, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x11, 0x74, 0x85, 0x67, 0x68,
0x11, 0x85, 0x14, 0x82, 0x14, 0x85, 0x14, 0x85, 0x14, 0x82, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85,
0x11, 0x85, 0x14, 0x82, 0x14, 0x85, 0x11, 0x85, 0x1D, 0x85, 0x85, 0x14, 0x05, 0x82, 0x00, 0x03,
0x1F, 0x12, 0x48, 0x00, 0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x04, 0x80, 0x00, 0x21, 0x26, 0x85, 0x61, 0x24, 0x80, 0x80, 0x61, 0x61, 0x80, 0x80, 0x77, 0x6E,
0x85, 0x16, 0x80, 0x80, 0x85, 0x61, 0x80, 0x09, 0x85, 0x09, 0x61, 0x6A, 0x80, 0x09, 0x85, 0x16,
0x85, 0x85, 0x6A, 0x24, 0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x85,
0x01, 0x52, 0x0C, 0x84, 0x00, 0x05, 0x4E, 0x85, 0x85, 0x51, 0x59, 0x00, 0x07, 0x84, 0x01, 0x50,
0x01, 0x53, 0x04, 0x85, 0x01, 0x4F, 0x04, 0x84, 0x04, 0x85, 0x01, 0x52, 0x04, 0x84, 0x00, 0x03,
0x53, 0x85, 0x85, 0x00, 0x0B, 0x84, 0x00, 0x07, 0x4F, 0x85, 0x85, 0x84, 0x84, 0x84, 0x5A, 0x00,
0x07, 0x85, 0x00, 0x04, 0x84, 0x84, 0x84, 0x4E, 0x11, 0x85, 0x0B, 0x84, 0x01, 0x5A, 0x04, 0x85,
0x00, 0x0D, 0x56, 0x84, 0x84, 0x84, 0x5A, 0x85, 0x85, 0x85, 0x5A, 0x84, 0x84, 0x84, 0x57, 0x00,
0x06, 0x85, 0x00, 0x04, 0x4F, 0x84, 0x84, 0x4D, 0x05, 0x85, 0x01, 0x4D, 0x09, 0x84, 0x01, 0x52,
0x15, 0x85, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x67, 0x67, 0x1D, 0x68, 0x82,
0x11, 0x85, 0x14, 0x82, 0x68, 0x85, 0x6D, 0x85, 0x68, 0x82, 0x14, 0x85, 0x11, 0x82, 0x60, 0x85,
0x11, 0x85, 0x14, 0x82, 0x1D, 0x85, 0x11, 0x85, 0x85, 0x1D, 0x60, 0x14, 0x05, 0x82, 0x00, 0x03,
0x1F, 0x12, 0x48, 0x00, 0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x04, 0x80, 0x00, 0x21, 0x26, 0x85, 0x24, 0x16, 0x24, 0x16, 0x6A, 0x6A, 0x16, 0x69, 0x24, 0x85,
0x85, 0x69, 0x09, 0x16, 0x85, 0x6A, 0x16, 0x09, 0x85, 0x09, 0x16, 0x85, 0x16, 0x26, 0x85, 0x09,
0x85, 0x63, 0x09, 0x09, 0x85, 0x00, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x11, 0x85,
0x01, 0x57, 0x0C, 0x84, 0x01, 0x52, 0x04, 0x85, 0x01, 0x4F, 0x05, 0x84, 0x01, 0x50, 0x01, 0x57,
0x05, 0x85, 0x01, 0x4E, 0x04, 0x84, 0x01, 0x51, 0x04, 0x85, 0x00, 0x07, 0x4D, 0x84, 0x84, 0x84,
0x4D, 0x85, 0x85, 0x00, 0x0B, 0x84, 0x00, 0x07, 0x4F, 0x85, 0x85, 0x84, 0x84, 0x50, 0x51, 0x00,
0x07, 0x85, 0x00, 0x04, 0x84, 0x84, 0x84, 0x4E, 0x11, 0x85, 0x0A, 0x84, 0x01, 0x59, 0x01, 0x51,
0x04, 0x85, 0x04, 0x84, 0x00, 0x08, 0x4F, 0x85, 0x85, 0x85, 0x4D, 0x84, 0x84, 0x4F, 0x07, 0x85,
0x00, 0x04, 0x4D, 0x84, 0x84, 0x5A, 0x05, 0x85, 0x01, 0x57, 0x01, 0x50, 0x08, 0x84, 0x01, 0x53,
0x15, 0x85, 0x00, 0x28, 0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x67, 0x6D, 0x2C, 0x14, 0x11,
0x1D, 0x85, 0x60, 0x2C, 0x82, 0x60, 0x85, 0x70, 0x82, 0x2C, 0x60, 0x85, 0x1D, 0x11, 0x60, 0x85,
0x82, 0x6D, 0x74, 0x2C, 0x6D, 0x60, 0x11, 0x85, 0x1D, 0x82, 0x60, 0x14, 0x05, 0x82, 0x00, 0x03,
0x1F, 0x12, 0x48, 0x00, 0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00,
0x04, 0x80, 0x00, 0x05, 0x69, 0x26, 0x61, 0x61, 0x16, 0x00, 0x04, 0x61, 0x00, 0x06, 0x09, 0x80,
0x61, 0x26, 0x80, 0x24, 0x04, 0x61, 0x00, 0x0E, 0x09, 0x61, 0x09, 0x80, 0x16, 0x61, 0x61, 0x24,
0x80, 0x61, 0x09, 0x80, 0x09, 0x61, 0x04, 0x80, 0x00, 0x04, 0x2F, 0x30, 0x22, 0x2D, 0x24, 0x85,
0x00, 0x06, 0x51, 0x52, 0x4F, 0x4F, 0x52, 0x51, 0x06, 0x85, 0x01, 0x51, 0x04, 0x4E, 0x01, 0x51,
0x04, 0x85, 0x01, 0x53, 0x04, 0x4E, 0x01, 0x85, 0x01, 0x85, 0x04, 0x4E, 0x01, 0x52, 0x06, 0x4F,
0x00, 0x06, 0x4E, 0x85, 0x85, 0x4F, 0x4F, 0x5C, 0x08, 0x85, 0x00, 0x04, 0x4F, 0x4F, 0x4F, 0x53,
0x11, 0x85, 0x08, 0x4D, 0x01, 0x5D, 0x01, 0x52, 0x05, 0x85, 0x01, 0x51, 0x04, 0x4D, 0x00, 0x07,
0x57, 0x85, 0x85, 0x85, 0x50, 0x84, 0x59, 0x00, 0x08, 0x85, 0x00, 0x04, 0x50, 0x84, 0x84, 0x52,
0x06, 0x85, 0x01, 0x57, 0x01, 0x56, 0x05, 0x84, 0x01, 0x56, 0x01, 0x52, 0x16, 0x85, 0x00, 0x28,
0x2D, 0x22, 0x30, 0x5B, 0x82, 0x82, 0x82, 0x11, 0x70, 0x60, 0x70, 0x2C, 0x60, 0x60, 0x60, 0x1D,
0x82, 0x2C, 0x60, 0x2C, 0x82, 0x1D, 0x60, 0x60, 0x60, 0x2C, 0x1D, 0x60, 0x82, 0x11, 0x70, 0x60,
0x1D, 0x64, 0x11, 0x70, 0x64, 0x82, 0x1D, 0x2C, 0x05, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x48, 0x00,
0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x29, 0x80, 0x00, 0x04,
0x2F, 0x30, 0x22, 0x2D, 0x9E, 0x85, 0x00, 0x05, 0x4E, 0x4F, 0x4F, 0x5E, 0x4E, 0x00, 0x18, 0x85,
0x00, 0x04, 0x2D, 0x22, 0x30, 0x5B, 0x29, 0x82, 0x00, 0x03, 0x1F, 0x12, 0x48, 0x00, 0x09, 0x85,
0x00, 0x00, 0x08, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x33, 0x00, 0x29, 0x07, 0x00, 0x04, 0x2F, 0x30,
0x22, 0x2D, 0xBB, 0x85, 0x00, 0x04, 0x2D, 0x22, 0x3A, 0x5B, 0x29, 0x1B, 0x00, 0x03, 0x1F, 0x12,
0x48, 0x00, 0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x01, 0x22, 0x01, 0x1F, 0x2C, 0x30, 0x01, 0x22,
0x01, 0x2D, 0xBB, 0x85, 0x01, 0x2D, 0x01, 0x22, 0x2C, 0x30, 0x01, 0x12, 0x01, 0x48, 0x09, 0x85,
0x00, 0x00, 0x08, 0x85, 0x01, 0x4B, 0x01, 0x18, 0x2B, 0x1F, 0x00, 0x03, 0x12, 0x22, 0x36, 0x00,
0xBB, 0x85, 0x00, 0x03, 0x2D, 0x22, 0x47, 0x00, 0x2A, 0x1F, 0x00, 0x03, 0x39, 0x18, 0x48, 0x00,
0x09, 0x85, 0x00, 0x00, 0x08, 0x85, 0x01, 0x2D, 0x01, 0x4B, 0x2B, 0x22, 0x01, 0x45, 0x01, 0x20,
0xBD, 0x85, 0x01, 0x20, 0x01, 0x45, 0x2B, 0x22, 0x01, 0x4B, 0x01, 0x36, 0x09, 0x85, 0x00, 0x00,
0x1A, 0x85, 0x01, 0x4E, 0x0E, 0x84, 0x01, 0x4D, 0xD4, 0x85, 0x01, 0x53, 0x01, 0x50, 0x0D, 0x84,
0x01, 0x50, 0x1E, 0x85, 0x00, 0x00, 0x1B, 0x85, 0x01, 0x4D, 0x0E, 0x84, 0x01, 0x5E, 0xD3, 0x85,
0x01, 0x4D, 0x0E, 0x84, 0x01, 0x4F, 0x1E, 0x85, 0x00, 0x00, 0x1B, 0x85, 0x01, 0x4E, 0x0E, 0x84,
0x01, 0x50, 0x01, 0x53, 0xD1, 0x85, 0x01, 0x5E, 0x0E, 0x84, 0x01, 0x56, 0x01, 0x51, 0x1E, 0x85,
0x00, 0x00, 0x1C, 0x85, 0x01, 0x4D, 0x0E, 0x84, 0x01, 0x59, 0xD0, 0x85, 0x01, 0x57, 0x01, 0x50,
0x0E, 0x84, 0x01, 0x52, 0x1F, 0x85, 0x00, 0x00, 0x1C, 0x85, 0x01, 0x53, 0x0F, 0x84, 0x01, 0x5A,
0xCE, 0x85, 0x01, 0x51, 0x01, 0x59, 0x0E, 0x84, 0x01, 0x59, 0x20, 0x85, 0x00, 0x00, 0x1D, 0x85,
0x01, 0x5A, 0x0F, 0x84, 0x01, 0x52, 0xCD, 0x85, 0x01, 0x58, 0x0F, 0x84, 0x01, 0x4E, 0x20, 0x85,
0x00, 0x00, 0x1D, 0x85, 0x01, 0x51, 0x01, 0x50, 0x0E, 0x84, 0x01, 0x50, 0x01, 0x57, 0xCB, 0x85,
0x01, 0x4F, 0x0F, 0x84, 0x01, 0x5D, 0x21, 0x85, 0x00, 0x00, 0x1E, 0x85, 0x01, 0x5C, 0x0F, 0x84,
0x01, 0x50, 0x01, 0x53, 0xC9, 0x85, 0x01, 0x52, 0x0F, 0x84, 0x01, 0x50, 0x01, 0x51, 0x21, 0x85,
0x00, 0x00, 0x1F, 0x85, 0x01, 0x5D, 0x0F, 0x84, 0x01, 0x59, 0x01, 0x51, 0xC7, 0x85, 0x01, 0x57,
0x10, 0x84, 0x01, 0x5C, 0x22, 0x85, 0x00, 0x00, 0x1F, 0x85, 0x01, 0x51, 0x01, 0x50, 0x0F, 0x84,
0x01, 0x59, 0x01, 0x51, 0xC5, 0x85, 0x01, 0x57, 0x01, 0x50, 0x0F, 0x84, 0x01, 0x5D, 0x23, 0x85,
0x00, 0x00, 0x20, 0x85, 0x01, 0x4E, 0x10, 0x84, 0x01, 0x59, 0x01, 0x51, 0xC3, 0x85, 0x01, 0x57,
0x01, 0x50, 0x0F, 0x84, 0x01, 0x50, 0x01, 0x51, 0x23, 0x85, 0x00, 0x00, 0x21, 0x85, 0x01, 0x5A,
0x10, 0x84, 0x01, 0x59, 0x01, 0x51, 0xC1, 0x85, 0x01, 0x57, 0x01, 0x50, 0x10, 0x84, 0x01, 0x4E,
0x24, 0x85, 0x00, 0x00, 0x22, 0x85, 0x01, 0x59, 0x10, 0x84, 0x01, 0x59, 0x01, 0x51, 0xBF, 0x85,
0x01, 0x57, 0x01, 0x50, 0x10, 0x84, 0x01, 0x4F, 0x25, 0x85, 0x00, 0x00, 0x22, 0x85, 0x01, 0x51,
0x01, 0x50, 0x10, 0x84, 0x01, 0x59, 0x01, 0x51, 0xBD, 0x85, 0x01, 0x4E, 0x01, 0x50, 0x10, 0x84,
0x01, 0x5D, 0x26, 0x85, 0x00, 0x00, 0x23, 0x85, 0x01, 0x57, 0x11, 0x84, 0x01, 0x56, 0x01, 0x57,
0xBB, 0x85, 0x01, 0x52, 0x11, 0x84, 0x01, 0x59, 0x01, 0x51, 0x26, 0x85, 0x00, 0x00, 0x24, 0x85,
0x01, 0x52, 0x11, 0x84, 0x01, 0x50, 0x01, 0x4E, 0xB9, 0x85, 0x01, 0x4F, 0x11, 0x84, 0x01, 0x50,
0x01, 0x53, 0x27, 0x85, 0x00, 0x00, 0x25, 0x85, 0x01, 0x4F, 0x12, 0x84, 0x01, 0x52, 0xB6, 0x85,
0x01, 0x51, 0x01, 0x58, 0x11, 0x84, 0x01, 0x50, 0x01, 0x57, 0x28, 0x85, 0x00, 0x00, 0x26, 0x85,
0x01, 0x58, 0x12, 0x84, 0x01, 0x58, 0xB4, 0x85, 0x01, 0x53, 0x01, 0x59, 0x12, 0x84, 0x01, 0x52,
0x29, 0x85, 0x00, 0x00, 0x27, 0x85, 0x01, 0x58, 0x12, 0x84, 0x01, 0x59, 0x01, 0x53, 0xB1, 0x85,
0x01, 0x5C, 0x01, 0x50, 0x12, 0x84, 0x01, 0x52, 0x2A, 0x85, 0x00, 0x00, 0x28, 0x85, 0x01, 0x58,
0x12, 0x84, 0x01, 0x50, 0x01, 0x5C, 0xAF, 0x85, 0x01, 0x5A, 0x13, 0x84, 0x01, 0x52, 0x2B, 0x85,
0x00, 0x00, 0x29, 0x85, 0x01, 0x58, 0x13, 0x84, 0x01, 0x5A, 0x01, 0x51, 0xAB, 0x85, 0x01, 0x57,
0x01, 0x59, 0x13, 0x84, 0x01, 0x52, 0x2C, 0x85, 0x00, 0x00, 0x2A, 0x85, 0x01, 0x58, 0x13, 0x84,
0x01, 0x56, 0x01, 0x4E, 0xA9, 0x85, 0x01, 0x5E, 0x01, 0x50, 0x13, 0x84, 0x01, 0x52, 0x2D, 0x85,
0x00, 0x00, 0x2B, 0x85, 0x01, 0x58, 0x14, 0x84, 0x01, 0x5A, 0x01, 0x51, 0xA5, 0x85, 0x01, 0x53,
0x01, 0x4D, 0x14, 0x84, 0x01, 0x52, 0x2E, 0x85, 0x00, 0x00, 0x2C, 0x85, 0x01, 0x58, 0x14, 0x84,
0x01, 0x56, 0x01, 0x4E, 0xA3, 0x85, 0x01, 0x4F, 0x01, 0x50, 0x13, 0x84, 0x01, 0x50, 0x01, 0x52,
0x2F, 0x85, 0x00, 0x00, 0x2D, 0x85, 0x01, 0x52, 0x15, 0x84, 0x01, 0x5D, 0x01, 0x53, 0x31, 0x85,
0x01, 0x0D, 0x3C, 0x4B, 0x01, 0x06, 0x30, 0x85, 0x01, 0x4E, 0x01, 0x59, 0x14, 0x84, 0x01, 0x50,
0x01, 0x57, 0x30, 0x85, 0x00, 0x00, 0x2E, 0x85, 0x01, 0x52, 0x01, 0x50, 0x14, 0x84, 0x01, 0x50,
0x01, 0x4F, 0x2F, 0x85, 0x00, 0x03, 0x28, 0x4B, 0x6C, 0x00, 0x3A, 0x0E, 0x00, 0x03, 0x71, 0x4B,
0x28, 0x00, 0x2D, 0x85, 0x01, 0x53, 0x01, 0x58, 0x15, 0x84, 0x01, 0x59, 0x01, 0x57, 0x31, 0x85,
0x00, 0x00, 0x2F, 0x85, 0x01, 0x57, 0x01, 0x50, 0x15, 0x84, 0x01, 0x56, 0x01, 0x52, 0x2D, 0x85,
0x00, 0x03, 0x00, 0x4B, 0x43, 0x00, 0x3A, 0x0A, 0x00, 0x03, 0x43, 0x4B, 0x4A, 0x00, 0x2B, 0x85,
0x00, 0x03, 0x51, 0x4F, 0x50, 0x00, 0x15, 0x84, 0x01, 0x4D, 0x01, 0x51, 0x32, 0x85, 0x00, 0x00,
0x30, 0x85, 0x01, 0x51, 0x01, 0x59, 0x16, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x2B, 0x85, 0x00, 0x04,
0x28, 0x4B, 0x62, 0x30, 0x05, 0x4C, 0x01, 0x2E, 0x01, 0x30, 0x18, 0x4C, 0x01, 0x2E, 0x01, 0x04,
0x04, 0x4C, 0x01, 0x39, 0x01, 0x04, 0x07, 0x4C, 0x01, 0x04, 0x01, 0x2E, 0x09, 0x4C, 0x00, 0x03,
0x30, 0x3F, 0x4A, 0x00, 0x2A, 0x85, 0x01, 0x52, 0x01, 0x50, 0x16, 0x84, 0x01, 0x5A, 0x34, 0x85,
0x00, 0x00, 0x32, 0x85, 0x01, 0x5A, 0x17, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x29, 0x85, 0x00, 0x05,
0x19, 0x4B, 0x2A, 0x30, 0x78, 0x00, 0x04, 0x15, 0x00, 0x03, 0x4A, 0x4C, 0x75, 0x00, 0x17, 0x15,
0x00, 0x09, 0x01, 0x78, 0x0D, 0x15, 0x15, 0x15, 0x12, 0x39, 0x06, 0x00, 0x05, 0x15, 0x00, 0x03,
0x21, 0x2E, 0x78, 0x00, 0x08, 0x15, 0x00, 0x04, 0x0A, 0x30, 0x75, 0x06, 0x28, 0x85, 0x01, 0x52,
0x01, 0x56, 0x16, 0x84, 0x01, 0x50, 0x01, 0x5C, 0x35, 0x85, 0x00, 0x00, 0x33, 0x85, 0x01, 0x5C,
0x01, 0x50, 0x17, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x28, 0x85, 0x00, 0x0F, 0x3B, 0x75, 0x30, 0x2A,
0x62, 0x30, 0x30, 0x32, 0x15, 0x15, 0x23, 0x30, 0x30, 0x30, 0x02, 0x00, 0x0E, 0x30, 0x00, 0x22,
0x1C, 0x04, 0x30, 0x30, 0x3A, 0x15, 0x15, 0x23, 0x30, 0x30, 0x30, 0x4C, 0x2A, 0x02, 0x30, 0x23,
0x30, 0x02, 0x30, 0x2E, 0x2E, 0x12, 0x30, 0x30, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x31, 0x30,
0x4B, 0x15, 0x26, 0x85, 0x01, 0x52, 0x01, 0x56, 0x17, 0x84, 0x01, 0x59, 0x01, 0x53, 0x36, 0x85,
0x00, 0x00, 0x34, 0x85, 0x01, 0x53, 0x01, 0x59, 0x18, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x26, 0x85,
0x00, 0x3F, 0x37, 0x4B, 0x04, 0x04, 0x39, 0x30, 0x30, 0x30, 0x32, 0x3D, 0x3D, 0x1C, 0x30, 0x04,
0x1C, 0x04, 0x30, 0x30, 0x04, 0x30, 0x32, 0x30, 0x30, 0x32, 0x30, 0x32, 0x30, 0x32, 0x3A, 0x30,
0x44, 0x30, 0x32, 0x30, 0x44, 0x44, 0x42, 0x30, 0x30, 0x30, 0x4C, 0x2E, 0x3F, 0x4C, 0x3F, 0x30,
0x7A, 0x4C, 0x7A, 0x30, 0x12, 0x30, 0x32, 0x30, 0x32, 0x32, 0x30, 0x02, 0x30, 0x4C, 0x02, 0x4B,
0x1E, 0x00, 0x23, 0x85, 0x00, 0x03, 0x51, 0x5E, 0x56, 0x00, 0x18, 0x84, 0x01, 0x5A, 0x38, 0x85,
0x00, 0x00, 0x36, 0x85, 0x01, 0x4F, 0x19, 0x84, 0x01, 0x56, 0x01, 0x52, 0x25, 0x85, 0x00, 0x23,
0x71, 0x4C, 0x30, 0x2A, 0x30, 0x30, 0x1C, 0x02, 0x2E, 0x32, 0x42, 0x3A, 0x1C, 0x1C, 0x1C, 0x04,
0x3A, 0x1C, 0x32, 0x1C, 0x32, 0x30, 0x32, 0x42, 0x1C, 0x42, 0x3A, 0x04, 0x30, 0x1C, 0x32, 0x1C,
0x32, 0x30, 0x04, 0x00, 0x04, 0x30, 0x00, 0x17, 0x4C, 0x4C, 0x15, 0x15, 0x23, 0x02, 0x3D, 0x15,
0x0A, 0x30, 0x3B, 0x30, 0x02, 0x30, 0x32, 0x3A, 0x30, 0x02, 0x30, 0x31, 0x31, 0x4B, 0x03, 0x00,
0x21, 0x85, 0x00, 0x03, 0x53, 0x4F, 0x50, 0x00, 0x18, 0x84, 0x01, 0x50, 0x01, 0x4E, 0x39, 0x85,
0x00, 0x00, 0x37, 0x85, 0x01, 0x57, 0x01, 0x59, 0x19, 0x84, 0x00, 0x03, 0x50, 0x5A, 0x53, 0x00,
0x22, 0x85, 0x00, 0x3D, 0x0D, 0x6C, 0x30, 0x39, 0x30, 0x30, 0x30, 0x02, 0x44, 0x30, 0x04, 0x3A,
0x42, 0x1C, 0x30, 0x04, 0x3A, 0x32, 0x1C, 0x3A, 0x44, 0x30, 0x04, 0x1C, 0x32, 0x1C, 0x1C, 0x44,
0x30, 0x32, 0x1C, 0x32, 0x1C, 0x3A, 0x44, 0x30, 0x42, 0x30, 0x30, 0x4C, 0x4C, 0x44, 0x32, 0x27,
0x32, 0x27, 0x32, 0x49, 0x30, 0x12, 0x30, 0x27, 0x30, 0x44, 0x30, 0x32, 0x04, 0x30, 0x4C, 0x4C,
0x71, 0x00, 0x20, 0x85, 0x01, 0x4E, 0x01, 0x58, 0x1A, 0x84, 0x01, 0x5D, 0x01, 0x51, 0x3A, 0x85,
0x00, 0x00, 0x39, 0x85, 0x01, 0x4F, 0x1B, 0x84, 0x01, 0x5D, 0x01, 0x5C, 0x20, 0x85, 0x00, 0x3D,
0x1E, 0x4B, 0x02, 0x04, 0x31, 0x30, 0x02, 0x1C, 0x02, 0x04, 0x32, 0x23, 0x1C, 0x2E, 0x30, 0x44,
0x02, 0x32, 0x23, 0x30, 0x27, 0x04, 0x32, 0x02, 0x32, 0x31, 0x1C, 0x27, 0x32, 0x32, 0x2E, 0x32,
0x3D, 0x30, 0x23, 0x32, 0x1C, 0x30, 0x30, 0x4C, 0x4C, 0x04, 0x30, 0x3D, 0x30, 0x3D, 0x30, 0x39,
0x30, 0x4C, 0x30, 0x3D, 0x30, 0x1F, 0x30, 0x02, 0x04, 0x62, 0x31, 0x3F, 0x4A, 0x00, 0x1D, 0x85,
0x00, 0x03, 0x51, 0x5E, 0x56, 0x00, 0x1A, 0x84, 0x01, 0x50, 0x01, 0x5C, 0x3C, 0x85, 0x00, 0x00,
0x3A, 0x85, 0x01, 0x57, 0x01, 0x4D, 0x1B, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x57, 0x00, 0x1E, 0x85,
0x00, 0x3C, 0x48, 0x7A, 0x30, 0x12, 0x04, 0x4C, 0x04, 0x04, 0x31, 0x2E, 0x23, 0x04, 0x23, 0x04,
0x04, 0x23, 0x04, 0x23, 0x73, 0x39, 0x02, 0x04, 0x23, 0x04, 0x73, 0x04, 0x02, 0x02, 0x3D, 0x12,
0x04, 0x73, 0x04, 0x02, 0x02, 0x04, 0x04, 0x04, 0x47, 0x4C, 0x27, 0x04, 0x39, 0x04, 0x39, 0x04,
0x39, 0x30, 0x62, 0x30, 0x2E, 0x30, 0x2E, 0x30, 0x04, 0x04, 0x04, 0x62, 0x75, 0x06, 0x1B, 0x85,
0x01, 0x5C, 0x01, 0x58, 0x1C, 0x84, 0x01, 0x5A, 0x01, 0x51, 0x3D, 0x85, 0x00, 0x00, 0x3C, 0x85,
0x01, 0x5E, 0x01, 0x50, 0x1C, 0x84, 0x00, 0x03, 0x59, 0x5E, 0x53, 0x00, 0x1B, 0x85, 0x00, 0x2F,
0x06, 0x71, 0x2E, 0x0D, 0x62, 0x1F, 0x2A, 0x2E, 0x31, 0x47, 0x62, 0x3B, 0x62, 0x73, 0x02, 0x62,
0x12, 0x62, 0x47, 0x3B, 0x62, 0x47, 0x62, 0x1F, 0x73, 0x62, 0x3B, 0x62, 0x49, 0x7A, 0x62, 0x47,
0x62, 0x1F, 0x1F, 0x62, 0x47, 0x62, 0x7A, 0x7A, 0x2E, 0x44, 0x4C, 0x62, 0x12, 0x62, 0x7A, 0x00,
0x0B, 0x2E, 0x01, 0x4B, 0x01, 0x15, 0x18, 0x85, 0x00, 0x03, 0x57, 0x5A, 0x56, 0x00, 0x1C, 0x84,
0x01, 0x59, 0x01, 0x4E, 0x3F, 0x85, 0x00, 0x00, 0x3D, 0x85, 0x01, 0x51, 0x01, 0x58, 0x1E, 0x84,
0x00, 0x03, 0x59, 0x5E, 0x53, 0x00, 0x18, 0x85, 0x01, 0x19, 0x01, 0x4A, 0x38, 0x4B, 0x01, 0x3B,
0x01, 0x19, 0x15, 0x85, 0x00, 0x03, 0x57, 0x5A, 0x56, 0x00, 0x1D, 0x84, 0x01, 0x50, 0x01, 0x5E,
0x41, 0x85, 0x00, 0x00, 0x3F, 0x85, 0x01, 0x57, 0x01, 0x4D, 0x1F, 0x84, 0x00, 0x03, 0x59, 0x4F,
0x57, 0x00, 0x18, 0x85, 0x00, 0x2C, 0x02, 0x00, 0x49, 0x36, 0x03, 0x03, 0x15, 0x00, 0x15, 0x06,
0x00, 0x49, 0x49, 0x49, 0x4B, 0x47, 0x49, 0x78, 0x47, 0x78, 0x78, 0x7A, 0x78, 0x7A, 0x78, 0x47,
0x2A, 0x78, 0x47, 0x78, 0x7A, 0x7A, 0x78, 0x47, 0x78, 0x47, 0x46, 0x12, 0x06, 0x00, 0x06, 0x49,
0x06, 0x37, 0x0B, 0x03, 0x01, 0x19, 0x13, 0x85, 0x00, 0x03, 0x5C, 0x5A, 0x56, 0x00, 0x1F, 0x84,
0x01, 0x5A, 0x01, 0x51, 0x42, 0x85, 0x00, 0x00, 0x41, 0x85, 0x01, 0x4E, 0x01, 0x56, 0x20, 0x84,
0x00, 0x04, 0x56, 0x58, 0x5C, 0x51, 0x17, 0x85, 0x0A, 0x2D, 0x01, 0x00, 0x01, 0x46, 0x15, 0x49,
0x00, 0x03, 0x18, 0x0D, 0x23, 0x00, 0x09, 0x2D, 0x01, 0x19, 0x16, 0x85, 0x00, 0x03, 0x53, 0x5E,
0x5D, 0x00, 0x21, 0x84, 0x01, 0x58, 0x01, 0x53, 0x44, 0x85, 0x00, 0x00, 0x43, 0x85, 0x01, 0x52,
0x01, 0x56, 0x22, 0x84, 0x00, 0x04, 0x59, 0x5A, 0x5C, 0x51, 0x12, 0x85, 0x01, 0x48, 0x2D, 0x22,
0x01, 0x46, 0x12, 0x85, 0x00, 0x04, 0x53, 0x52, 0x58, 0x56, 0x22, 0x84, 0x01, 0x4D, 0x01, 0x4E,
0x46, 0x85, 0x00, 0x00, 0x45, 0x85, 0x01, 0x52, 0x01, 0x56, 0x24, 0x84, 0x00, 0x04, 0x59, 0x5A,
0x52, 0x53, 0x0E, 0x85, 0x01, 0x22, 0x01, 0x39, 0x2B, 0x30, 0x00, 0x04, 0x44, 0x22, 0x00, 0x19,
0x0C, 0x85, 0x00, 0x04, 0x57, 0x5E, 0x58, 0x56, 0x24, 0x84, 0x01, 0x4D, 0x01, 0x4E, 0x48, 0x85,
0x00, 0x00, 0x47, 0x85, 0x01, 0x52, 0x01, 0x56, 0x26, 0x84, 0x00, 0x05, 0x50, 0x4D, 0x4F, 0x5C,
0x53, 0x00, 0x09, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x7B, 0x00, 0x29, 0x54, 0x00, 0x05, 0x7B, 0x30,
0x22, 0x00, 0x05, 0x00, 0x07, 0x85, 0x00, 0x04, 0x57, 0x52, 0x5A, 0x4D, 0x27, 0x84, 0x01, 0x4D,
0x01, 0x4E, 0x4A, 0x85, 0x00, 0x00, 0x49, 0x85, 0x01, 0x52, 0x01, 0x59, 0x2A, 0x84, 0x00, 0x0B,
0x4D, 0x58, 0x4F, 0x4E, 0x53, 0x85, 0x85, 0x85, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81, 0x00, 0x0B,
0x54, 0x30, 0x22, 0x15, 0x36, 0x85, 0x4E, 0x5C, 0x4F, 0x5D, 0x59, 0x00, 0x2A, 0x84, 0x01, 0x58,
0x01, 0x57, 0x4C, 0x85, 0x00, 0x00, 0x4B, 0x85, 0x01, 0x4E, 0x01, 0x5D, 0x2E, 0x84, 0x00, 0x05,
0x59, 0x4D, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x3C,
0x2C, 0x84, 0x00, 0x03, 0x50, 0x5A, 0x53, 0x00, 0x4E, 0x85, 0x00, 0x00, 0x4D, 0x85, 0x00, 0x03,
0x53, 0x5A, 0x50, 0x00, 0x2D, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x25,
0x07, 0x17, 0x01, 0x08, 0x01, 0x66, 0x11, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x3C,
0x2A, 0x84, 0x00, 0x03, 0x56, 0x52, 0x51, 0x00, 0x50, 0x85, 0x00, 0x00, 0x50, 0x85, 0x01, 0x52,
0x01, 0x4D, 0x2B, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x09, 0x85,
0x01, 0x5F, 0x01, 0x66, 0x0F, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x41, 0x28, 0x84,
0x01, 0x58, 0x01, 0x4E, 0x53, 0x85, 0x00, 0x00, 0x52, 0x85, 0x00, 0x03, 0x53, 0x5A, 0x56, 0x00,
0x28, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85, 0x01, 0x65,
0x01, 0x25, 0x0E, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x41, 0x25, 0x84, 0x00, 0x03,
0x59, 0x5E, 0x51, 0x00, 0x55, 0x85, 0x00, 0x00, 0x55, 0x85, 0x00, 0x03, 0x5C, 0x58, 0x50, 0x00,
0x25, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85, 0x85, 0x85,
0x76, 0x17, 0x17, 0x13, 0x04, 0x85, 0x01, 0x5F, 0x0E, 0x81, 0x00, 0x06, 0x54, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x22, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x53, 0x00, 0x58, 0x85, 0x00, 0x00, 0x58, 0x85,
0x01, 0x52, 0x01, 0x5D, 0x23, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x09,
0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x81, 0x81, 0x17, 0x00, 0x04, 0x85, 0x01, 0x25, 0x0D, 0x81,
0x00, 0x06, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x1F, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x57, 0x00,
0x5B, 0x85, 0x00, 0x00, 0x5A, 0x85, 0x00, 0x04, 0x51, 0x5C, 0x58, 0x50, 0x1F, 0x84, 0x00, 0x03,
0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x05, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x00, 0x04, 0x81,
0x04, 0x85, 0x01, 0x08, 0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x3C, 0x00,
0x1B, 0x84, 0x00, 0x03, 0x56, 0x5A, 0x57, 0x00, 0x5E, 0x85, 0x00, 0x00, 0x5E, 0x85, 0x00, 0x03,
0x4E, 0x5A, 0x59, 0x00, 0x1C, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x05,
0x08, 0x85, 0x85, 0x85, 0x5F, 0x00, 0x04, 0x81, 0x00, 0x05, 0x5F, 0x85, 0x85, 0x85, 0x08, 0x00,
0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x41, 0x00, 0x18, 0x84, 0x00, 0x03,
0x4D, 0x5E, 0x53, 0x00, 0x61, 0x85, 0x00, 0x00, 0x61, 0x85, 0x00, 0x04, 0x53, 0x52, 0x58, 0x50,
0x18, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x05, 0x08, 0x85, 0x85, 0x85,
0x5F, 0x00, 0x04, 0x81, 0x04, 0x85, 0x01, 0x08, 0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F,
0x29, 0x29, 0x41, 0x00, 0x14, 0x84, 0x00, 0x04, 0x59, 0x5A, 0x5C, 0x51, 0x64, 0x85, 0x00, 0x00,
0x65, 0x85, 0x00, 0x04, 0x57, 0x5E, 0x5D, 0x56, 0x14, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00,
0x0E, 0x81, 0x00, 0x0E, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x81, 0x81, 0x13, 0x85, 0x85, 0x85,
0x65, 0x66, 0x0D, 0x81, 0x00, 0x07, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x00, 0x10, 0x84,
0x00, 0x04, 0x59, 0x5A, 0x5C, 0x53, 0x68, 0x85, 0x00, 0x00, 0x69, 0x85, 0x00, 0x04, 0x53, 0x52,
0x5A, 0x4D, 0x10, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85,
0x85, 0x85, 0x76, 0x17, 0x13, 0x72, 0x04, 0x85, 0x01, 0x17, 0x0E, 0x81, 0x00, 0x07, 0x54, 0x30,
0x22, 0x2F, 0x29, 0x29, 0x29, 0x00, 0x0B, 0x84, 0x00, 0x05, 0x50, 0x4D, 0x4F, 0x4E, 0x51, 0x00,
0x6C, 0x85, 0x00, 0x00, 0x6E, 0x85, 0x00, 0x05, 0x57, 0x52, 0x5A, 0x4D, 0x50, 0x00, 0x0A, 0x84,
0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85, 0x01, 0x13, 0x0F, 0x81,
0x00, 0x08, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x3C, 0x05, 0x84, 0x00, 0x05, 0x56, 0x4D,
0x4F, 0x5C, 0x53, 0x00, 0x71, 0x85, 0x00, 0x00, 0x73, 0x85, 0x00, 0x06, 0x53, 0x4E, 0x5E, 0x5A,
0x4D, 0x56, 0x04, 0x84, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x09, 0x85,
0x01, 0x17, 0x10, 0x81, 0x00, 0x0C, 0x54, 0x30, 0x22, 0x2F, 0x29, 0x29, 0x29, 0x7F, 0x4D, 0x4F,
0x52, 0x4E, 0x77, 0x85, 0x00, 0x00, 0x7A, 0x85, 0x00, 0x06, 0x57, 0x4E, 0x5E, 0x22, 0x1F, 0x54,
0x0E, 0x81, 0x00, 0x0C, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x66, 0x17, 0x85, 0x85, 0x85, 0x17,
0x0F, 0x81, 0x00, 0x08, 0x54, 0x30, 0x22, 0x33, 0x3E, 0x2D, 0x36, 0x03, 0x7B, 0x85, 0x00, 0x00,
0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x0C, 0x08, 0x85, 0x85, 0x85,
0x5F, 0x81, 0x81, 0x81, 0x85, 0x85, 0x85, 0x65, 0x0F, 0x81, 0x00, 0x08, 0x54, 0x30, 0x22, 0x00,
0x36, 0x36, 0x36, 0x05, 0x7B, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00,
0x0E, 0x81, 0x00, 0x08, 0x08, 0x85, 0x85, 0x85, 0x5F, 0x81, 0x81, 0x66, 0x04, 0x85, 0x0F, 0x81,
0x00, 0x04, 0x54, 0x30, 0x22, 0x15, 0x04, 0x36, 0x7B, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03,
0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x00, 0x08, 0x08, 0x85, 0x85, 0x85, 0x72, 0x08, 0x08, 0x5F,
0x04, 0x85, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00, 0x04, 0x36, 0x01, 0x35, 0x7A, 0x85,
0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x0A, 0x85,
0x01, 0x5F, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00, 0x04, 0x36, 0x01, 0x19, 0x7A, 0x85,
0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x08, 0x09, 0x85,
0x01, 0x72, 0x01, 0x66, 0x0F, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x15, 0x04, 0x36, 0x01, 0x03,
0x7A, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x0E, 0x81, 0x01, 0x25,
0x07, 0x17, 0x01, 0x08, 0x01, 0x25, 0x11, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00, 0x04, 0x36,
0x01, 0x03, 0x7A, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81,
0x00, 0x04, 0x54, 0x30, 0x22, 0x00, 0x04, 0x36, 0x01, 0x05, 0x7A, 0x85, 0x00, 0x00, 0x7D, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x04, 0x81, 0x00, 0x21, 0x25, 0x08, 0x08, 0x66, 0x81, 0x81,
0x08, 0x25, 0x81, 0x08, 0x66, 0x81, 0x81, 0x08, 0x25, 0x81, 0x08, 0x25, 0x81, 0x25, 0x08, 0x66,
0x81, 0x66, 0x08, 0x25, 0x81, 0x81, 0x08, 0x66, 0x81, 0x81, 0x08, 0x00, 0x04, 0x81, 0x00, 0x04,
0x54, 0x30, 0x22, 0x15, 0x05, 0x36, 0x7A, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F,
0x54, 0x00, 0x04, 0x81, 0x00, 0x21, 0x85, 0x85, 0x85, 0x65, 0x08, 0x81, 0x85, 0x5F, 0x81, 0x65,
0x13, 0x81, 0x25, 0x85, 0x13, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08, 0x08, 0x65, 0x76, 0x85,
0x13, 0x81, 0x85, 0x08, 0x81, 0x13, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x00,
0x05, 0x36, 0x01, 0x19, 0x79, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00,
0x04, 0x81, 0x00, 0x21, 0x25, 0x81, 0x25, 0x85, 0x5F, 0x81, 0x85, 0x5F, 0x81, 0x13, 0x65, 0x5F,
0x76, 0x85, 0x25, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08, 0x72, 0x76, 0x81, 0x17, 0x85, 0x08,
0x85, 0x08, 0x08, 0x85, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x0C, 0x05, 0x05,
0x01, 0x35, 0x79, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x04, 0x81,
0x00, 0x21, 0x66, 0x13, 0x65, 0x85, 0x17, 0x81, 0x85, 0x5F, 0x81, 0x25, 0x85, 0x17, 0x65, 0x72,
0x81, 0x81, 0x85, 0x17, 0x81, 0x17, 0x85, 0x08, 0x85, 0x5F, 0x81, 0x08, 0x85, 0x17, 0x85, 0x13,
0x85, 0x65, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x85, 0x00, 0x00,
0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x04, 0x81, 0x00, 0x21, 0x13, 0x85, 0x5F, 0x08,
0x81, 0x81, 0x85, 0x5F, 0x81, 0x81, 0x76, 0x72, 0x85, 0x08, 0x81, 0x81, 0x85, 0x17, 0x81, 0x17,
0x85, 0x08, 0x65, 0x5F, 0x81, 0x08, 0x85, 0x17, 0x85, 0x85, 0x72, 0x08, 0x85, 0x00, 0x04, 0x81,
0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F,
0x54, 0x00, 0x04, 0x81, 0x00, 0x21, 0x5F, 0x85, 0x08, 0x17, 0x25, 0x08, 0x85, 0x72, 0x08, 0x81,
0x17, 0x85, 0x85, 0x66, 0x25, 0x08, 0x85, 0x13, 0x08, 0x17, 0x85, 0x08, 0x13, 0x65, 0x08, 0x5F,
0x85, 0x25, 0x85, 0x65, 0x25, 0x08, 0x85, 0x00, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D,
0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x04, 0x81, 0x00, 0x05,
0x25, 0x5F, 0x5F, 0x5F, 0x08, 0x00, 0x04, 0x5F, 0x00, 0x06, 0x81, 0x25, 0x5F, 0x17, 0x81, 0x08,
0x04, 0x5F, 0x00, 0x0E, 0x08, 0x5F, 0x25, 0x66, 0x13, 0x5F, 0x5F, 0x08, 0x81, 0x5F, 0x25, 0x81,
0x25, 0x5F, 0x04, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85,
0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81, 0x00, 0x04, 0x54, 0x30, 0x22, 0x2D, 0x7F, 0x85,
0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x54, 0x00, 0x29, 0x81, 0x00, 0x04, 0x54, 0x30,
0x22, 0x2D, 0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x00, 0x03, 0x22, 0x1F, 0x44, 0x00, 0x29, 0x1F,
0x00, 0x04, 0x44, 0x30, 0x22, 0x2D, 0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x01, 0x22, 0x01, 0x01,
0x2B, 0x1F, 0x00, 0x03, 0x3F, 0x22, 0x03, 0x00, 0x7F, 0x85, 0x00, 0x00, 0x7D, 0x85, 0x01, 0x15,
0x01, 0x45, 0x2C, 0x22, 0x01, 0x21, 0x80, 0x85, 0x00, 0x00, 0xFF, 0x85, 0x2D, 0x85, 0x00, 0x00,
0xFF, 0x85, 0x2D, 0x85, 0x00, 0x00, 0xFF, 0x85, 0x2D, 0x85, 0x00, 0x01,
};
#ifdef ROMFS_DIRENTRY_HEAD
static const ROMFS_DIRENTRY token_w_dir = { 0, 0, ROMFS_DIRENTRY_HEAD, "token_w.bmp", 14620, token_w };
#undef ROMFS_DIRENTRY_HEAD
#define ROMFS_DIRENTRY_HEAD &token_w_dir
#endif

52
resources_manager.c Normal file
View File

@ -0,0 +1,52 @@
#include "resources_manager.h"
typedef struct ImageInfo {
gdispImage* pointer;
const char* filePath;
} ImageInfo;
gdispImage imgtoken;
gdispImage imgtoken_w;
static ImageInfo _imagesArray[2];
static font_t _fontsArray[2];
bool_t guiResourcesManagerInit(void)
{
size_t i;
// Fill images array
_imagesArray[0].pointer = &imgtoken;
_imagesArray[0].filePath = "token.bmp";
_imagesArray[1].pointer = &imgtoken_w;
_imagesArray[1].filePath = "token_w.bmp";
// Open images
for (i = 0; i < 2; i++) {
gdispImageOpenFile(gstudioGetImage(i), gstudioGetImageFilePath(i));
}
// Cache images
// Open fonts
_fontsArray[0] = gdispOpenFont("arial_12_arial12_aa");
_fontsArray[1] = gdispOpenFont("arial__14_arial14_aa");
return TRUE;
}
GFXINLINE gdispImage* gstudioGetImage(int imageIndex)
{
return _imagesArray[imageIndex].pointer;
}
GFXINLINE const char* gstudioGetImageFilePath(int imageIndex)
{
return _imagesArray[imageIndex].filePath;
}
GFXINLINE font_t gstudioGetFont(int fontIndex)
{
return _fontsArray[fontIndex];
}

27
resources_manager.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef _RESOURCES_MANAGER_H
#define _RESOURCES_MANAGER_H
#include "gfx.h"
// Image indexes
#define token 0
#define token_w 1
// Font indexes
#define arial_12 0
#define arial__14 1
#ifdef __cplusplus
extern "C" {
#endif
bool_t guiResourcesManagerInit(void);
gdispImage* gstudioGetImage(int imageIndex);
const char* gstudioGetImageFilePath(int imageIndex);
font_t gstudioGetFont(int fontIndex);
#ifdef __cplusplus
}
#endif
#endif // _RESOURCES_MANAGER_H

7
romfs_files.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef _ROMFS_FILES_H
#define _ROMFS_FILES_H
#include "resources/token.h"
#include "resources/token_w.h"
#endif // _ROMFS_FILES_H

143
sai.c Normal file
View File

@ -0,0 +1,143 @@
/**
******************************************************************************
* File Name : SAI.c
* Description : This file provides code for the configuration
* of the SAI instances.
******************************************************************************
** This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* COPYRIGHT(c) 2018 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "sai.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
SAI_HandleTypeDef hsai_BlockA2;
/* SAI2 init function */
void MX_SAI2_Init(void)
{
hsai_BlockA2.Instance = SAI2_Block_A;
hsai_BlockA2.Init.AudioMode = SAI_MODEMASTER_TX;
hsai_BlockA2.Init.Synchro = SAI_ASYNCHRONOUS;
hsai_BlockA2.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
hsai_BlockA2.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;
hsai_BlockA2.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
hsai_BlockA2.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_8K;
hsai_BlockA2.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
hsai_BlockA2.Init.MonoStereoMode = SAI_STEREOMODE;
hsai_BlockA2.Init.CompandingMode = SAI_NOCOMPANDING;
hsai_BlockA2.Init.TriState = SAI_OUTPUT_NOTRELEASED;
if (HAL_SAI_InitProtocol(&hsai_BlockA2, SAI_I2S_STANDARD, SAI_PROTOCOL_DATASIZE_16BIT, 2) != HAL_OK)
{
for(;;){}
}
}
static uint32_t SAI2_client =0;
void HAL_SAI_MspInit(SAI_HandleTypeDef* hsai)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* SAI2 */
if(hsai->Instance==SAI2_Block_A)
{
/* SAI2 clock enable */
if (SAI2_client == 0)
{
__HAL_RCC_SAI2_CLK_ENABLE();
}
SAI2_client ++;
/**SAI2_A_Block_A GPIO Configuration
PE0 ------> SAI2_MCLK_A
PI5 ------> SAI2_SCK_A
PI7 ------> SAI2_FS_A
PI6 ------> SAI2_SD_A
*/
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF10_SAI2;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF10_SAI2;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
}
}
void HAL_SAI_MspDeInit(SAI_HandleTypeDef* hsai)
{
/* SAI2 */
if(hsai->Instance==SAI2_Block_A)
{
SAI2_client --;
if (SAI2_client == 0)
{
/* Peripheral clock disable */
__HAL_RCC_SAI2_CLK_DISABLE();
}
/**SAI2_A_Block_A GPIO Configuration
PE0 ------> SAI2_MCLK_A
PI5 ------> SAI2_SCK_A
PI7 ------> SAI2_FS_A
PI6 ------> SAI2_SD_A
*/
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_0);
HAL_GPIO_DeInit(GPIOI, GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_6);
}
}
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

81
sai.h Normal file
View File

@ -0,0 +1,81 @@
/**
******************************************************************************
* File Name : SAI.h
* Description : This file provides code for the configuration
* of the SAI instances.
******************************************************************************
** This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* COPYRIGHT(c) 2018 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __sai_H
#define __sai_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern SAI_HandleTypeDef hsai_BlockA2;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
extern void _Error_Handler(char *, int);
void MX_SAI2_Init(void);
/* USER CODE BEGIN Prototypes */
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /*__ sai_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

48
time_receiver.c Normal file
View File

@ -0,0 +1,48 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file time_receiver.c
/// \brief Time receiver thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
//////////////////////////////////////////////////////////////////////////////////
// THREAD TIME RECEIVER
//////////////////////////////////////////////////////////////////////////////////
void TimeReceiver(void *argument)
{
struct queueMsg_t queueMsg; // queue message
osStatus_t retCode; // return error code
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// QUEUE READ
//----------------------------------------------------------------------------
retCode = osMessageQueueGet(
queue_timeR_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
queueMsg.type = TIME_MSG;
//----------------------------------------------------------------------------
// QUEUE SEND (send the time message on LCD)
//----------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}

77
time_sender.c Normal file
View File

@ -0,0 +1,77 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file time_sender.c
/// \brief Time sender thread
/// \author Pascal Sartoretti (sap at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "main.h"
#include "rtx_os.h"
extern void *osRtxMemoryAlloc(void *mem, uint32_t size, uint32_t type);
extern uint32_t osRtxMemoryFree (void *mem, void *block);
//////////////////////////////////////////////////////////////////////////////////
// THREAD TIME SENDER
//////////////////////////////////////////////////////////////////////////////////
void TimeSender(void *argument)
{
struct queueMsg_t queueMsg; // queue message
char * stringPtr; // string to send pointer
time_t seconds; // current time in seconds
struct tm timeStr; // current time in structure
struct tm * ptrTm; // pointer to it
int32_t eventFlag; // event flag for check
osStatus_t retCode; // return code error
//------------------------------------------------------------------------------
// initial time and date set
//------------------------------------------------------------------------------
timeStr.tm_hour = 12;
timeStr.tm_min = 00;
timeStr.tm_sec = 00;
timeStr.tm_year = 2024 - 1900; // years since 1900
timeStr.tm_mon = 5; // month (0-11) 6-> june
timeStr.tm_mday = 1;
seconds = mktime(&timeStr);
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
osDelay(1000); // wake-up each second
seconds++; // increment seconds
//----------------------------------------------------------------------------
// EVENT FLAG WAIT for checked box without to clear it and no wait
//----------------------------------------------------------------------------
eventFlag = osEventFlagsWait(
eventFlag_id,
BROADCAST_TIME_EVT,
osFlagsWaitAny | osFlagsNoClear,
0);
if((eventFlag & BROADCAST_TIME_EVT) == BROADCAST_TIME_EVT) // want to send time ?
{
ptrTm = localtime(&seconds);
stringPtr = osMemoryPoolAlloc(memPool,osWaitForever);
queueMsg.type = DATA_IND; // prepare message
queueMsg.anyPtr = stringPtr;
queueMsg.sapi = TIME_SAPI;
queueMsg.addr = BROADCAST_ADDRESS; // of type broadcast
sprintf((char*)stringPtr," %02d:%02d:%02d ",
ptrTm->tm_hour,ptrTm->tm_min,ptrTm->tm_sec);
//------------------------------------------------------------------------
// QUEUE SEND
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
}

510
tokenring_project.uvoptx Normal file
View File

@ -0,0 +1,510 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>EVENTREC_CNF</Key>
<Name>-l0 -a1 -s0 -f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U0671FF485057775187193017 -O8398 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(5BA02477) -L00(0) -TO131075 -TC216000000 -TT216000000 -TP21 -TDS806B -TDT0 -TDC1F -TIE1 -TIP1 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>sai</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x20010108</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow3>
<Mm>
<WinNumber>3</WinNumber>
<SubType>10</SubType>
<ItemText>0x200022d0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow3>
<ScvdPack>
<Filename>C:\Keil_v5\ARM\CMSIS\5.9.0\CMSIS\RTOS2\RTX\RTX5.scvd</Filename>
<Type>ARM.CMSIS.5.9.0</Type>
<SubType>1</SubType>
</ScvdPack>
<ScvdPack>
<Filename>C:\Keil_v5\Keil\ARM_Compiler\1.7.2\EventRecorder.scvd</Filename>
<Type>Keil.ARM_Compiler.1.7.2</Type>
<SubType>1</SubType>
</ScvdPack>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>1</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group 1</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\lcd.c</PathWithFileName>
<FilenameWithoutPath>lcd.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\touch.c</PathWithFileName>
<FilenameWithoutPath>touch.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\chat_sender.c</PathWithFileName>
<FilenameWithoutPath>chat_sender.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\chat_receiver.c</PathWithFileName>
<FilenameWithoutPath>chat_receiver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\time_sender.c</PathWithFileName>
<FilenameWithoutPath>time_sender.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\time_receiver.c</PathWithFileName>
<FilenameWithoutPath>time_receiver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\mac_sender.c</PathWithFileName>
<FilenameWithoutPath>mac_sender.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\mac_receiver.c</PathWithFileName>
<FilenameWithoutPath>mac_receiver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\phy_receiver.c</PathWithFileName>
<FilenameWithoutPath>phy_receiver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\phy_sender.c</PathWithFileName>
<FilenameWithoutPath>phy_sender.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\debug.c</PathWithFileName>
<FilenameWithoutPath>debug.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\main.h</PathWithFileName>
<FilenameWithoutPath>main.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\audio.c</PathWithFileName>
<FilenameWithoutPath>audio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Audio_746G_Discovery.c</PathWithFileName>
<FilenameWithoutPath>Audio_746G_Discovery.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>studio</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\gui.c</PathWithFileName>
<FilenameWithoutPath>gui.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\resources_manager.c</PathWithFileName>
<FilenameWithoutPath>resources_manager.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
<Group>
<GroupName>::CMSIS Driver</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
<Group>
<GroupName>::Compiler</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
<Group>
<GroupName>::Device</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
<Group>
<GroupName>::Hesso pack</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
<Group>
<GroupName>::uGFX library</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>

867
tokenring_project.uvprojx Normal file
View File

@ -0,0 +1,867 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32F746NGHx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F7xx_DFP.2.12.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20010000,0x40000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32F746NGHx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32F746NGHx$CMSIS\SVD\STM32F7x6_v1r1.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>tokenring_project</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -REMAP -MPU</SimDllArguments>
<SimDlgDll>DCM.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM7</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments> -MPU</TargetDllArguments>
<TargetDlgDll>TCM.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM7</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>1</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
<GenerateListings>0</GenerateListings>
<asHll>1</asHll>
<asAsm>1</asAsm>
<asMacX>1</asMacX>
<asSyms>1</asSyms>
<asFals>1</asFals>
<asDbgD>1</asDbgD>
<asForm>1</asForm>
<ldLst>0</ldLst>
<ldmm>1</ldmm>
<ldXref>1</ldXref>
<BigEnd>0</BigEnd>
<AdsALst>1</AdsALst>
<AdsACrf>1</AdsACrf>
<AdsANop>0</AdsANop>
<AdsANot>0</AdsANot>
<AdsLLst>1</AdsLLst>
<AdsLmap>1</AdsLmap>
<AdsLcgr>1</AdsLcgr>
<AdsLsym>1</AdsLsym>
<AdsLszi>1</AdsLszi>
<AdsLtoi>1</AdsLtoi>
<AdsLsun>1</AdsLsun>
<AdsLven>1</AdsLven>
<AdsLsxf>1</AdsLsxf>
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M7"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<mOS>1</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
<hadIROM>1</hadIROM>
<hadIRAM>1</hadIRAM>
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>1</hadIROM2>
<StupSel>8</StupSel>
<useUlib>0</useUlib>
<EndSel>0</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>4</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
<NoZi1>0</NoZi1>
<NoZi2>0</NoZi2>
<NoZi3>0</NoZi3>
<NoZi4>0</NoZi4>
<NoZi5>0</NoZi5>
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>
<Im1Chk>1</Im1Chk>
<Im2Chk>1</Im2Chk>
<OnChipMemories>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocm4>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm4>
<Ocm5>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm5>
<Ocm6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm6>
<IRAM>
<Type>0</Type>
<StartAddress>0x20010000</StartAddress>
<Size>0x40000</Size>
</IRAM>
<IROM>
<Type>1</Type>
<StartAddress>0x8000000</StartAddress>
<Size>0x100000</Size>
</IROM>
<XRAM>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x8000000</StartAddress>
<Size>0x100000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
<StartAddress>0x200000</StartAddress>
<Size>0x100000</Size>
</OCR_RVCT5>
<OCR_RVCT6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT6>
<OCR_RVCT7>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT7>
<OCR_RVCT8>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
<StartAddress>0x20010000</StartAddress>
<Size>0x40000</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x10000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>1</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
<Strict>0</Strict>
<EnumInt>0</EnumInt>
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>2</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>1</v6Lang>
<v6LangP>1</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath>.\RTE\uGFX_library;.\</IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>1</interw>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<thumb>0</thumb>
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20010000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc>--keep=os_cb_sections</Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\main.c</FilePath>
</File>
<File>
<FileName>lcd.c</FileName>
<FileType>1</FileType>
<FilePath>.\lcd.c</FilePath>
</File>
<File>
<FileName>touch.c</FileName>
<FileType>1</FileType>
<FilePath>.\touch.c</FilePath>
</File>
<File>
<FileName>chat_sender.c</FileName>
<FileType>1</FileType>
<FilePath>.\chat_sender.c</FilePath>
</File>
<File>
<FileName>chat_receiver.c</FileName>
<FileType>1</FileType>
<FilePath>.\chat_receiver.c</FilePath>
</File>
<File>
<FileName>time_sender.c</FileName>
<FileType>1</FileType>
<FilePath>.\time_sender.c</FilePath>
</File>
<File>
<FileName>time_receiver.c</FileName>
<FileType>1</FileType>
<FilePath>.\time_receiver.c</FilePath>
</File>
<File>
<FileName>mac_sender.c</FileName>
<FileType>1</FileType>
<FilePath>.\mac_sender.c</FilePath>
</File>
<File>
<FileName>mac_receiver.c</FileName>
<FileType>1</FileType>
<FilePath>.\mac_receiver.c</FilePath>
</File>
<File>
<FileName>phy_receiver.c</FileName>
<FileType>1</FileType>
<FilePath>.\phy_receiver.c</FilePath>
</File>
<File>
<FileName>phy_sender.c</FileName>
<FileType>1</FileType>
<FilePath>.\phy_sender.c</FilePath>
</File>
<File>
<FileName>debug.c</FileName>
<FileType>1</FileType>
<FilePath>.\debug.c</FilePath>
</File>
<File>
<FileName>main.h</FileName>
<FileType>5</FileType>
<FilePath>.\main.h</FilePath>
</File>
<File>
<FileName>audio.c</FileName>
<FileType>1</FileType>
<FilePath>.\audio.c</FilePath>
</File>
<File>
<FileName>Audio_746G_Discovery.c</FileName>
<FileType>1</FileType>
<FilePath>.\Audio_746G_Discovery.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>studio</GroupName>
<Files>
<File>
<FileName>gui.c</FileName>
<FileType>1</FileType>
<FilePath>.\gui.c</FilePath>
</File>
<File>
<FileName>resources_manager.c</FileName>
<FileType>1</FileType>
<FilePath>.\resources_manager.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
<Group>
<GroupName>::CMSIS Driver</GroupName>
</Group>
<Group>
<GroupName>::Compiler</GroupName>
</Group>
<Group>
<GroupName>::Device</GroupName>
</Group>
<Group>
<GroupName>::Hesso pack</GroupName>
</Group>
<Group>
<GroupName>::uGFX library</GroupName>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<packages>
<filter>
<targetInfos/>
</filter>
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0">
<targetInfos>
<targetInfo name="Target 1" versionMatchMode="fixed"/>
</targetInfos>
</package>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0">
<targetInfos>
<targetInfo name="Target 1" versionMatchMode="fixed"/>
</targetInfos>
</package>
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2">
<targetInfos>
<targetInfo name="Target 1" versionMatchMode="fixed"/>
</targetInfos>
</package>
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0">
<targetInfos>
<targetInfo name="Target 1" versionMatchMode="fixed"/>
</targetInfos>
</package>
<package name="uGFX_lib" schemaVersion="1.2" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0">
<targetInfos>
<targetInfo name="Target 1" versionMatchMode="fixed"/>
</targetInfos>
</package>
</packages>
<apis>
<api Capiversion="2.3.0" Cclass="CMSIS Driver" Cgroup="I2C" exclusive="0">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</api>
<api Capiversion="1.1.0" Cclass="CMSIS Driver" Cgroup="SAI" exclusive="0">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.2.0"/>
<targetInfos>
<targetInfo name="Target 1">
<c>
<Define>SAI2_RX_BLOCK=SAI_BLOCK_B, SAI2_TX_BLOCK=SAI_BLOCK_A</Define>
</c>
</targetInfo>
</targetInfos>
</api>
<api Capiversion="2.1.2" Cclass="CMSIS" Cgroup="RTOS2" exclusive="1">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</api>
<api Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" exclusive="1">
<package name="STM32F7xx_DFP" schemaVersion="1.3" url="http://www.keil.com/pack" vendor="Keil" version="2.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</api>
</apis>
<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.6.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Capiversion="2.1.3" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvariant="Source" Cvendor="ARM" Cversion="5.5.4" condition="RTOS2 RTX5">
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Buttons" Cvendor="HessoValais" Cversion="1.0.0" condition="any">
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Keyboard" Cvendor="HessoValais" Cversion="1.1.1" condition="spi2">
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="LEDs" Cvendor="HessoValais" Cversion="1.0.0" condition="any">
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="UART" Cvendor="HessoValais" Cversion="1.0.0" condition="uart6">
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil" Cversion="1.5.1" condition="Cortex-M Device">
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="I/O" Csub="STDOUT" Cvariant="ITM" Cvendor="Keil" Cversion="1.2.0" condition="ARMCC Cortex-M with ITM">
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Capiversion="2.2.0" Cclass="CMSIS Driver" Cgroup="I2C" Cvendor="Keil" Cversion="1.9.0" condition="STM32F7 CMSIS_Driver I2C">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Capiversion="1.0.0" Cclass="CMSIS Driver" Cgroup="SAI" Cvendor="Keil" Cversion="1.5.0" condition="STM32F7 CMSIS_Driver SAI">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1">
<c>
<Define>SAI2_RX_BLOCK=SAI_BLOCK_B, SAI2_TX_BLOCK=SAI_BLOCK_A</Define>
</c>
</targetInfo>
</targetInfos>
</component>
<component Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 Framework Classic">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Common" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL Common">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Cortex" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="DMA" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="GPIO" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="PWR" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="RCC" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL GPIO">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="SDRAM" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL DMA">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="SPI" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL DMA">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="UART" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL DMA">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.2.4" condition="STM32F7 CMSIS">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="2.0.0">
<package name="uGFX_lib" schemaVersion="1.2" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
</components>
<files>
<file attr="config" category="source" name="CMSIS\RTOS2\RTX\Config\RTX_Config.c" version="5.1.0">
<instance index="0">RTE\CMSIS\RTX_Config.c</instance>
<component Capiversion="2.1.3" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvariant="Source" Cvendor="ARM" Cversion="5.5.4" condition="RTOS2 RTX5"/>
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="CMSIS\RTOS2\RTX\Config\RTX_Config.h" version="5.2.0">
<instance index="0">RTE\CMSIS\RTX_Config.h</instance>
<component Capiversion="2.1.3" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvariant="Source" Cvendor="ARM" Cversion="5.5.4" condition="RTOS2 RTX5"/>
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="Config\EventRecorderConf.h" version="1.0.0">
<instance index="0">RTE\Compiler\EventRecorderConf.h</instance>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil" Cversion="1.5.1" condition="Cortex-M Device"/>
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="CMSIS\Driver\Config\RTE_Device.h" version="1.4.0">
<instance index="0">RTE\Device\STM32F746NGHx\RTE_Device.h</instance>
<component Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 Framework Classic"/>
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" condition="STM32F746_ARMCC" name="Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f746xx.s" version="1.2.0">
<instance index="0">RTE\Device\STM32F746NGHx\startup_stm32f746xx.s</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.2.4" condition="STM32F7 CMSIS"/>
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="MDK\Templates\Inc\stm32f7xx_hal_conf.h" version="1.2.0">
<instance index="0">RTE\Device\STM32F746NGHx\stm32f7xx_hal_conf.h</instance>
<component Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 Framework Classic"/>
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c" version="1.2.0">
<instance index="0">RTE\Device\STM32F746NGHx\system_stm32f7xx.c</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.2.4" condition="STM32F7 CMSIS"/>
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\clock_216.c" version="1.0.0">
<instance index="0" removed="1">RTE\Hesso_pack\clock_216.c</instance>
<component Cclass="Hesso pack" Cgroup="Utilities" Csub="Clock" Cvendor="HessoValais" Cversion="1.0.0"/>
<package name="Extension_board" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="file:///C:\tmp\ext_pack" vendor="HessoValais" version="1.0.0"/>
<targetInfos/>
</file>
<file attr="config" category="header" name="extension_board\clock_216.h" version="1.0.0">
<instance index="0" removed="1">RTE\Hesso_pack\clock_216.h</instance>
<component Cclass="Hesso pack" Cgroup="Utilities" Csub="Clock" Cvendor="HessoValais" Cversion="1.0.0"/>
<package name="Extension_board" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="file:///C:\tmp\ext_pack" vendor="HessoValais" version="1.0.0"/>
<targetInfos/>
</file>
<file attr="config" category="source" name="extension_board\ext_buttons.c" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_buttons.c</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Buttons" Cvendor="HessoValais" Cversion="1.0.0" condition="any"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="extension_board\ext_buttons.h" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_buttons.h</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Buttons" Cvendor="HessoValais" Cversion="1.0.0" condition="any"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\ext_keyboard.c" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_keyboard.c</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Keyboard" Cvendor="HessoValais" Cversion="1.1.1" condition="spi2"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="extension_board\ext_keyboard.h" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_keyboard.h</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="Keyboard" Cvendor="HessoValais" Cversion="1.1.1" condition="spi2"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\ext_led.c" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_led.c</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="LEDs" Cvendor="HessoValais" Cversion="1.0.0" condition="any"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="extension_board\ext_led.h" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_led.h</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="LEDs" Cvendor="HessoValais" Cversion="1.0.0" condition="any"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\ext_uart.c" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_uart.c</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="UART" Cvendor="HessoValais" Cversion="1.0.0" condition="uart6"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="extension_board\ext_uart.h" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_uart.h</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="UART" Cvendor="HessoValais" Cversion="1.0.0" condition="uart6"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="ugfx\gdisp_lld_STM32LTDC.c" version="1.0.0">
<instance index="0" removed="1">RTE\uGFX_library\gdisp_lld_STM32LTDC.c</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="1.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="file:///C:\tmp\ext_pack" vendor="uGFX" version="1.0.0"/>
<targetInfos/>
</file>
<file attr="config" category="source" name="ugfx\gfx_mk_rtx5_os.c" version="1.0.0">
<instance index="0" removed="1">RTE\uGFX_library\gfx_mk_rtx5_os.c</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="1.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="file:///C:\tmp\ext_pack" vendor="uGFX" version="1.0.0"/>
<targetInfos/>
</file>
<file Cversion="2.0.0" attr="config" category="source" name="ugfx\config\with_os\gfxconf.h" version="1.0.0">
<instance index="0">RTE\uGFX_library\gfxconf.h</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="2.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="ugfx\gmouse_lld_FT5336.c" version="1.0.0">
<instance index="0" removed="1">RTE\uGFX_library\gmouse_lld_FT5336.c</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="1.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="file:///C:\tmp\ext_pack" vendor="uGFX" version="1.0.0"/>
<targetInfos/>
</file>
<file attr="config" category="source" name="ugfx\boards\base\STM32F746-Discovery\stm32f7_i2c.c" version="2.0.0">
<instance index="0" removed="1">RTE\uGFX_library\stm32f7_i2c.c</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="2.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" supportContact="mailto:pascal.sartoretti@hevs.ch" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0"/>
<targetInfos/>
</file>
</files>
</RTE>
</Project>

146
touch.c Normal file
View File

@ -0,0 +1,146 @@
//////////////////////////////////////////////////////////////////////////////////
/// \file touch.c
/// \brief Touch control thread
/// \author Pascal Sartoretti (pascal dot sartoretti at hevs dot ch)
/// \version 1.0 - original
/// \date 2018-02
//////////////////////////////////////////////////////////////////////////////////
#include "stm32f7xx_hal.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
//////////////////////////////////////////////////////////////////////////////////
// THREAD TOUCH
//////////////////////////////////////////////////////////////////////////////////
void Touch(void *argument)
{
struct queueMsg_t queueMsg; // queue message
GEvent* pe; // uGFX event type
osStatus_t retCode;
GHandle tmpHndl;
//------------------------------------------------------------------------------
for (;;) // loop until doomsday
{
//----------------------------------------------------------------------------
// get an UGFX_Event from uGFX task touchscreen control
//----------------------------------------------------------------------------
pe = geventEventWait(&gl, TIME_INFINITE);
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
// BUTTON PRESSED case -------------------------------------------------------
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
if(pe->type == GEVENT_GWIN_BUTTON)
{
tmpHndl = ((GEventGWinButton*)pe)->gwin; // Get handle
// NEW_TOKEN case ----------------------------------------------------------
if((tmpHndl == btnToken)||
(tmpHndl == btnSendToken))
{
queueMsg.type = NEW_TOKEN; // message type
queueMsg.anyPtr = NULL; // pointer
//------------------------------------------------------------------------
// QUEUE SEND (send NEW_TOKEN to mac sender)
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
#if DEBUG_MODE != 0
if(tmpHndl == btnSendDebug)
{
gTokenInterface.debugMsgToSend = TRUE; // message type
}
#endif
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
// CHECKBOX PRESSED case -----------------------------------------------------
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
if(pe->type == GEVENT_GWIN_CHECKBOX)
{
tmpHndl = ((GEventGWinCheckbox*)pe)->gwin;
// Connection change -------------------------------------------------------
if(tmpHndl == cbConnectoed)
{
if((((GEventGWinCheckbox*)pe)->isChecked) != FALSE)
{
queueMsg.type = START; // message type
}
else
{
queueMsg.type = STOP; // message type
}
queueMsg.anyPtr = NULL; // pointer
//------------------------------------------------------------------------
// QUEUE SEND (send START of STOP to mac sender)
//------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_macS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
//--------------------------------------------------------------------------
if(tmpHndl == cbDebugConnected) // debug connected changed
{
gTokenInterface.debugOnline = gwinCheckboxIsChecked(cbDebugConnected);
}
// Time to send on broadcast------------------------------------------------
if(tmpHndl == cbBroadcastTime)
{
gTokenInterface.broadcastTime = ((GEventGWinCheckbox*)pe)->isChecked;
if(gTokenInterface.broadcastTime != FALSE)
{
//----------------------------------------------------------------------
// set event flag to broadcast time
//----------------------------------------------------------------------
retCode = osEventFlagsSet(eventFlag_id, BROADCAST_TIME_EVT); // set flag
if(retCode < 0)
{
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
else
{
//----------------------------------------------------------------------
// clear event flag to broadcast time
//----------------------------------------------------------------------
retCode = osEventFlagsClear(eventFlag_id, BROADCAST_TIME_EVT); // clr flag
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
// checkbox receive CRC error ----------------------------------------------
if(tmpHndl == cbRecCRCError)
{
gTokenInterface.needReceiveCRCError = ((GEventGWinCheckbox*)pe)->isChecked;
}
// checkbox send CRC error -------------------------------------------------
if(tmpHndl == cbSendCRCError)
{
gTokenInterface.needSendCRCError = ((GEventGWinCheckbox*)pe)->isChecked;
}
}
// All action ----------------------------------------------------------------
else
{
queueMsg.type = TOUCH_EVENT; // message type
queueMsg.anyPtr = pe; // pointer
//--------------------------------------------------------------------------
// QUEUE SEND (send all messages to LCD manager)
//--------------------------------------------------------------------------
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode,__LINE__,__FILE__,CONTINUE);
}
}
}

7
ugfx_system.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef _UGFX_SYSTEM_H
#define _UGFX_SYSTEM_H
#include "gfx.h"
#include "resources_manager.h"
#endif // _UGFX_SYSTEM_H

7
userfonts.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef _USERFONTS_H
#define _USERFONTS_H
#include "resources/arial_12_arial12_aa.c"
#include "resources/arial__14_arial14_aa.c"
#endif // _USERFONTS_H

66
widgetstyles.h Normal file
View File

@ -0,0 +1,66 @@
#ifndef _WIDGETSTYLES_H
#define _WIDGETSTYLES_H
#include "gfx.h"
// WidgetStyle: red_green
const GWidgetStyle red_green = {
HTML2COLOR(0xFFFFFF), // background
HTML2COLOR(0x2A8FCD), // focus
// Enabled color set
{
HTML2COLOR(0x000000), // text
HTML2COLOR(0x404040), // edge
HTML2COLOR(0xFF0000), // fill
HTML2COLOR(0x00E000) // progress (active area)
},
// Disabled color set
{
HTML2COLOR(0xC0C0C0), // text
HTML2COLOR(0x808080), // edge
HTML2COLOR(0xE0E0E0), // fill
HTML2COLOR(0xC0E0C0) // progress (active area)
},
// Pressed color set
{
HTML2COLOR(0x404040), // text
HTML2COLOR(0x404040), // edge
HTML2COLOR(0x00FF00), // fill
HTML2COLOR(0x00E000) // progress (active area)
}
};
// WidgetStyle: white_on_gray
const GWidgetStyle white_on_gray = {
HTML2COLOR(0x606060), // background
HTML2COLOR(0x2A8FCD), // focus
// Enabled color set
{
HTML2COLOR(0xFFFFFF), // text
HTML2COLOR(0x404040), // edge
HTML2COLOR(0xE0E0E0), // fill
HTML2COLOR(0x00E000) // progress (active area)
},
// Disabled color set
{
HTML2COLOR(0xC0C0C0), // text
HTML2COLOR(0x808080), // edge
HTML2COLOR(0xE0E0E0), // fill
HTML2COLOR(0xC0E0C0) // progress (active area)
},
// Pressed color set
{
HTML2COLOR(0x00FF00), // text
HTML2COLOR(0x404040), // edge
HTML2COLOR(0x00FF00), // fill
HTML2COLOR(0x00E000) // progress (active area)
}
};
#endif // _WIDGETSTYLES_H